Ответ 1
Нет, я не видел способ очистить его без перенаправления.
У меня есть форма, которая иногда связана с некоторыми параметрами строки запроса. Проблема в том, что когда я отправляю форму обратно, параметр строки запроса все еще существует. Это не проблема, как у меня есть настройка, но мне просто не нравится, что она есть, и я вижу, что это проблема, если вам нужно проверить вход в определенном порядке.
Есть ли способ очистить этот параметр строки запроса простым, чистым способом? Я знаю, что могу изменить PostBackURL на кнопке, но это не кажется слишком эффективным.
Нет, я не видел способ очистить его без перенаправления.
Я думаю, вы ответили на свой вопрос. Используйте свойство 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"];
}
}
поместите это в нижней части страницы?
<script language="javascript" type="text/javascript">
document.forms[0].action = window.location.pathname;
</script>
В некоторых случаях вы можете использовать метод Server.Transfer()
, который имеет перегрузку, позволяющую указать, должны ли сохраняться данные запроса и данные формы.
Я предполагаю, что по какой-то причине вы не можете полагаться на Page.IsPostBack?
Если то, что вы делаете, является серверным, тогда просто добавить проверку для IsPostBack в своих методах (Page_Load, OnInit и т.д.) и обрабатывать только запросы, если это не сообщение назад (т.е. исходный запрос).
Я столкнулся с той же проблемой, и после некоторой охоты в Интернете я нашел этот фрагмент:
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 после того, как я закончил обработку исходных параметров строки запроса. Когда страница возвращается к предыдущей странице, параметры исчезли.
Я застрял в одной и той же проблеме.
Я решил это, используя следующий код:
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");
}
Этот метод не является тем, что вы бы назвали перенаправлением, но он определенно стирает строку запроса. Просто добавьте эту строку в конец вашего кода JavaScript:
window.location.search = "";
или
Добавьте это в конец HTML-страницы:
<script type="text/javascript">
window.location.search = "";
</script>
В зависимости от того, где вы вставляете код, время стирания строки запроса изменится.
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");
Вы можете попробовать Response.Redirect(Request.CurrentExecutionFilePath());
Он работает для меня.
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");