ASP.NET условный да / нет сообщения - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть кнопка asp:, которая запускает функцию кода за событием OnClick.В этом событии OnClick происходит несколько вещей, и среди этих вещей я проверяю в базе данных, должен ли я задать пользователю вопрос «да» или «нет».Для этого мне нужно окно сообщения.Сначала я сделал это так:

protected void MyButton_Onclick(object sender, EventArgs e)
{
    // lots of stuff happening
    bool iNeedToAskTheUser = INeedToAskTheUser(stuff);
    if (iNeedToAskTheUser) 
    {
        DialogResult result = MessageBox.Show("Do you want to fix all objects?", "Fix objects", MessageBoxButtons.YesNo);
        if (result == DialogResult.Yes) // do stuff
    }
    // some other stuff
}

Это прекрасно работает локально, но не при развертывании, поэтому я решил, что вместо этого мне нужно будет использовать ScriptManager.RegisterStartupScript.Я мог бы просто добавить javascript на страницу ASPX, которая запускает диалоговое окно и сохраняет ответ в скрытом элементе управления, на который я затем могу смотреть, но я не хочу запускать диалоговое окно без необходимости, которое я проверяю раньшеЯ делаю DialogResult в коде выше.Поэтому я не могу сделать это немедленно, когда пользователь нажимает кнопку.

Можно ли каким-либо образом использовать ScriptManager.RegisterStartupScript в «середине» моего кода _OnClick, чтобы я мог выбирать, действительно ли онпоказать кнопку, а затем также узнать, нажал ли пользователь «да» или «нет» (желательно) без обратной передачи?

1 Ответ

0 голосов
/ 27 февраля 2019

Я думал и тестировал два разных решения:

  1. Используйте ScriptManager.RegisterStartupScript в коде позади, чтобы запустить функцию подтверждения JavaScript на странице ASPX.Функция JavaScript будет устанавливать значение в скрытом элементе управления в зависимости от того, ответит ли пользователь «да» или «нет», и тогда мой программный код проверит значение этого скрытого поля и будет действовать в соответствии с этим.Проблема заключается в том, что после запуска ScriptManager.RegisterStartupScript он не ожидает «завершения» функции JavaScript, т. Е. Ждет, пока пользователь ответит на метод verify ().Таким образом, значение в скрытом элементе управления всегда будет пустым, поскольку код, находящийся позади, попадает в проверку этого элемента управления до того, как пользователь получит возможность ответить на метод verify ().Так что не стоит.
  2. Используйте ScriptManager.RegisterStartupScript в коде позади, чтобы открыть новую страницу ASPX, которая задает пользователю вопрос, а затем выполняет всю работу в ответ на ответ пользователя на этой странице.Проблема состоит в том, чтобы передать объект, над которым должна работать новая страница ASPX, в ответ на ответ пользователя.

Я уверен, что есть отличные решения, использующие Ajax или jQuery, но этодовольно простая функция, разработка которой не должна занимать слишком много времени, так что это как бы выходит за рамки этого.

Вместо этого я пойду с решением, в котором я знаю, что пользователь ответит на вопрос раньшеони нажимают кнопку.(Тихо бормоча себе под нос: «Это 2019 год, и нет хорошего способа запустить диалог да / нет из кода в веб-проекте .Net ...». Мне нужно вернуться к неработающему вебу).

...