Есть ли способ очистить параметры строки запроса при отправке назад? - PullRequest
11 голосов
/ 12 мая 2009

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

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

Ответы [ 11 ]

12 голосов
/ 12 мая 2009

Нет, я не видел способа очистить его без перенаправления.

7 голосов
/ 12 мая 2009

Я думаю, что вы ответили на свой вопрос. Используйте свойство PostBackURL.

<asp:Button PostBackUrl='<%# Request.ServerVariables["URL"] %>' runat="server" Text="Submit" />

или что-то вроде

foreach (Control ctrl in Page.Controls)
{
    if (ctrl is Button)
    {
        ((Button)ctrl).PostBackUrl = Request.ServerVariables["URL"];
    }
}
6 голосов
/ 12 мая 2009

поставить это внизу вашей страницы?

<script language="javascript" type="text/javascript">
    document.forms[0].action = window.location.pathname;
</script>
4 голосов
/ 02 июня 2014

Я застрял с той же проблемой.

Я решил это, используя следующий блок кода:

private void ClearQueryString()
{
    PropertyInfo isreadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
    isreadonly.SetValue(this.Request.QueryString, false, null);
    this.Request.QueryString.Remove("Action");
    this.Request.QueryString.Remove("param1");
    this.Request.QueryString.Remove("paramN");
}
3 голосов
/ 20 января 2010

Я только что столкнулся с той же проблемой, и после некоторой охоты в Интернете я нашел этот фрагмент:

public void ClearQueryStrings()
{
    string clientCommand = string.Format(
      "document.forms[\"{0}\"].action = \"{1}\";",
         this.Form.Name, Request.Url.Segments[Request.Url.Segments.Length - 1]);

    ClientScript.RegisterStartupScript(this.GetType(), "qr", clientCommand, true);
}

Я вызываю ClearQueryStrings () в моем Page_Load после завершения обработки исходных параметров строки запроса. Когда страница отправляется обратно, параметры исчезли.

Оригинальная статья здесь.

3 голосов
/ 13 мая 2009

Я предполагаю, что вы не можете полагаться на Page.IsPostBack по какой-то причине?

Если то, что вы делаете, на стороне сервера, тогда просто добавить проверку IsPostBack в ваши методы (Page_Load, OnInit и т. Д.) И обрабатывать строки запроса только в том случае, если это не обратная запись (т. Е. Первоначальный запрос) .

3 голосов
/ 12 мая 2009

В некоторых случаях вы можете использовать метод Server.Transfer(), который имеет перегрузку, позволяющую указать, должны ли данные строки запроса и формы сохраняться или нет.

0 голосов
/ 17 мая 2016

Вы можете попробовать Response.Redirect(Request.CurrentExecutionFilePath()); Это работает для меня.

0 голосов
/ 21 марта 2016
PropertyInfo isreadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
    // make collection editable
isreadonly.SetValue(this.Request.QueryString, false, null);
     // remove

this.Request.QueryString.Remove("status");
0 голосов
/ 23 июня 2014

Этот метод не тот, который вы бы назвали редиректом, но он определенно сотрет строку запроса. Просто добавьте эту строку в конец вашего кода JavaScript:

window.location.search = "";

Или

Добавьте это в конец вашей HTML-страницы:

<script type="text/javascript">
    window.location.search = "";
</script>

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

...