Проблема с использованием Winforms MessageBox в ASP.NET - PullRequest
0 голосов
/ 07 сентября 2010

У меня отображается MessageBox при отправке файла потокового чтения.Однако окно продолжает появляться даже после нажатия ОК.Когда я удерживаю клавишу Ввод, чтобы пролистать поля, из файла добавляется только одно поле.

Вот мой код позади

if (FileTypeDDL.SelectedValue == "Calendar Dates" && fileName == "calendar_dates.txt")
{
    //Check if full txt has already been uploaded
    SEPTA_DS.CalendarDatesTBLDataTable GetCalendarDates = (SEPTA_DS.CalendarDatesTBLDataTable)cdta.GetDataByCategory(Convert.ToString(Session["Cat"]));
    var category = Convert.ToString(CategoryDDL.SelectedItem);
    var service_id = Convert.ToString(row["service_id"]);
    var date = Convert.ToString(row["date"]);
    var exception_type = Convert.ToString(row["exception_type"]);
    if (GetCalendarDates.Rows.Count < 1)
    {
        int insertData = Convert.ToInt32(cdta.InsertCalendarDates(category, service_id, date, exception_type));
    }
    else
    {
        DialogResult result = MessageBox.Show("This will overwrite the current list. Are you sure you wish to continue?", "Important Message",
        MessageBoxButtons.YesNo,
        MessageBoxIcon.Exclamation);
        if (result == DialogResult.Yes)
        {
            int updateData = Convert.ToInt32(cdta.UpdateCalendarDates(category, service_id, date, exception_type, Convert.ToInt32(GetCalendarDates.Rows[0]["CalendarID"])));
        }
        else
        {
            Response.Redirect("~/Import.aspx");
        }
    }
}

Я просто хочу, чтобы окно появлялось один раз«Да» вставить данные.Почему и как я могу это сделать.

EDIT : я только что понял, что этот код находится в цикле foreach, и поэтому он повторяется.Мой новый вопрос;Как мне показать это MessageBox только один раз?

Ответы [ 3 ]

2 голосов
/ 07 сентября 2010

Как уже отмечали другие, вы не хотите использовать метод WinForms MessageBox на своих страницах ASP.NET.Это «работает», но происходит следующее: на сервере появляется сообщение .Вы видите окно сообщения, потому что вы разрабатываете локально, но если этот код был передан производственному сайту, посетители ничего не увидят - страница просто зависнет, ожидая, что кто-то, сидящий на веб-сервере, нажмет кнопку OK!: -)

Чтобы отобразить окно сообщения пользователю, вам нужно использовать клиентский скрипт.Есть две функции JavaScript, которые вы должны изучить:

  • подтверждение - отображает диалоговое окно с параметрами Ok и Cancel - это то, что вы, вероятно, хотите.
  • alert - отображает диалоговое окнос одной кнопкой Ok.

Я так понимаю, у вас есть кнопка, которую пользователь нажимает, чтобы начать этот процесс.Изучите использование свойства OnClientClick элементов управления Button / LinkButton / ImageButton.Во-первых, попробуйте установить что-то вроде этого:

OnClientClick="return confirm('Are you sure you want to do this?');"

Это отобразит окно сообщения с параметрами Ok / Cancel, когда пользователь нажимает кнопку.Если они нажимают Отмена, окно сообщения возвращает ложь и обратная передача останавливается.Если они нажимают «ОК», они проходят.

Теперь ваша ситуация немного сложнее, потому что вы хотите показать это, только если выполняется какое-то условие, а именно, если GetCalendarDates.Rows.Count> = 1 .Сложность в том, что вам нужно установить этот JavaScript через свойство OnClientClick перед обратной передачей.Так что, возможно, в Page_Load вы можете программно установить свойство кнопки OnClientClick, но только если выполняется условие интереса.Что-то вроде:

void Page_Load(...)
{
    if (GetCalendarDates.Rows.Count >= 1)
        myButton.OnClientClick = "return confirm('...');";
}

Я не уверен, как или когда устанавливается GetCalendarDates, но вам может быть лучше, чтобы указанная выше логика появлялась всякий раз, когда установлена ​​функция GetCalendarDates.Я предполагаю, что это GridView?Если это так, рассмотрите возможность добавления его в обработчик событий GridView DataBound.

Счастливого программирования!

0 голосов
/ 07 сентября 2010

Используете ли вы System.Windows.Forms.MessageBox?

Если это так, то вы не можете использовать это в ASP.Net, это только для сеансов Windows. (Вы получите сообщение об ошибке «Вы не авторизованы»)

Либо это, либо тег ASP.Net в вашем вопросе неверен.

0 голосов
/ 07 сентября 2010

Параметры:

  • Подумайте, Да, Да Для всех, Нет, Нет для всех видов пользовательских окон сообщений.
  • Соберите все необходимые данные и в конце цикла покажитеокно сообщения со всеми данными.
  • Пользовательское окно сообщения с надписью «запомнить мои действия для сеанса»
...