Есть ли способ очистить параметры строки запроса при отправке?

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

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

Ответ 1

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

Ответ 2

Я думаю, вы ответили на свой вопрос. Используйте свойство 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"];
    }
}

Ответ 3

поместите это в нижней части страницы?

<script language="javascript" type="text/javascript">
    document.forms[0].action = window.location.pathname;
</script>

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

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 после того, как я закончил обработку исходных параметров строки запроса. Когда страница возвращается к предыдущей странице, параметры исчезли.

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

Ответ 7

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

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

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");
}

Ответ 8

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

window.location.search = "";

или

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

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

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

Ответ 9

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");

Ответ 10

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

Ответ 11

using System.Collections;
using System.Reflection;

Используйте следующий код, чтобы очистить параметры строки запроса.

// To clear Query string value
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("YourQueryStringParameter");