Запретить браузеру показывать диалог повторной отправки запроса при обновлении - PullRequest
3 голосов
/ 14 марта 2009

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

Я не хочу, чтобы браузер спрашивал это. Как я могу избежать этого поведения?

Насколько я понимаю, это можно сделать с помощью шаблона post / redirect / get, но я не знаю, как это сделать в ASP.NET 3.5.

Ответы [ 2 ]

1 голос
/ 14 марта 2009

Все запросы POST, повторно отправленные браузером, подтвердят повторную отправку пользователю. Вы не можете изменить это поведение в браузере.

Что означает шаблон PRG для asp.net, так это то, что вы проверяете обратную передачу, выполняете свою обработку и перенаправляете пользователя на другую страницу (или ту же страницу с другой строкой запроса, чтобы изменить поведение этой страницы).

Проблема с этим шаблоном заключается в том, что вы теряете все функции обратной передачи asp.net, такие как viewstate и автоматическая обработка форм.

0 голосов
/ 14 марта 2009

Да, что-то вроде этого сделает работу за вас, в вашем событии загрузки страницы, например:

// Check to see if the user submitted the form:
if (Page.IsPostBack){
  // Get the Params collection - query and forms
  NameValueCollection params = Request.Params;
  StringBuilder query = new StringBuilder();

  // Iterate over the params collection to build a complete
  // query string - you can skip this and just build it
  // manually if you don't have many elements to worry about
  for(int i = 0; i <= params.Count - 1; i++)
  {
    // If we're not on the first parameter, add an & seperator
    if (i > 0){
      query.Append("&");
    }

    // Start the query string 
    query.AppendFormat("{0}=", params.GetKey(i));

    // Create a string array that contains
    // the values associated with each key,
    // join them together with commas.
    query.Append(String.Join(",", pColl.GetValues(i));
  }

  Response.Redirect(String.Format("{0}?{1}", 
                      Request.Url.AbsolutePath, query.ToString()))
}

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

С другой стороны, теперь они могут с радостью добавить в закладки страницу результатов и вернуться к своим результатам без повторной отправки формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...