2009-05-12 14 views
11

Mam formularz, który czasami łączy się z niektórych parametrów ciąg kwerendy. Problem polega na tym, że po odesłaniu formularza parametr ciągu zapytania nadal istnieje. Nie jest to tak naprawdę problem w taki sposób, w jaki go mam, ale po prostu nie podoba mi się, że jest tam, i może to być problem, jeśli trzeba sprawdzić dane wejściowe w określonej kolejności.Czy istnieje sposób na wyczyszczenie parametrów ciągu zapytania podczas wysyłania z powrotem?

Czy istnieje sposób na wyczyszczenie tego parametru ciągu zapytania w łatwy i czysty sposób? Wiem, że mogę zmienić PostBackURL na przycisku, ale to nie wydaje się zbyt skuteczne.

Odpowiedz

12

Nie, nie widziałem sposobu, aby usunąć to bez przekierowania.

+1

to samo tutaj. –

+0

Czy istnieje czysty sposób, aby wykonać Response.Redirect() na stronę, na której jesteś obecnie? –

+3

Spróbuj: Response.Redirect (Request.CurrentExecutionFilePath()) – rvarcher

3

W niektórych przypadkach można użyć metody Server.Transfer(), która ma przeciążenie, które pozwala określić, czy dane z kwerendy i formularzy mają być zachowane, czy nie.

5

umieścić to na dole strony?

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

Lub z kodem: behind1.Action = Request.Url.GetLeftPart (UriPartial.Path); – user764754

7

Myślę, że odpowiedziałeś na własne pytanie. Użyj właściwości PostBackURL.

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

Albo coś

foreach (Control ctrl in Page.Controls) 
{ 
    if (ctrl is Button) 
    { 
     ((Button)ctrl).PostBackUrl = Request.ServerVariables["URL"]; 
    } 
} 
3

Zakładam, że nie można polegać na Page.IsPostBack z jakiegoś powodu?

Jeśli to, co robisz, jest po stronie serwera, to łatwo jest dodać sprawdzanie IsPostBack w swoich metodach (Page_Load, OnInit, itp.) I przetwarzać tylko zapytania, jeśli nie jest to odpowiedź zwrotna (np.).

3

Właśnie natknąłem się na ten sam problem i po pewnym polowania w sieci znalazłem ten fragment:

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

I ClearQueryStrings() w moim Page_Load zadzwonić po Skończyłem przetwarzanie pierwotne parametry ciągu zapytania. Gdy strona zostanie cofnięta, parametry zniknęły.

Original article is here.

-1
using System.Collections; 
using System.Reflection; 

Użyj następującego kodu, aby usunąć string zapytanie parametrów.

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

Utknąłem z tym samym problemem.

Rozwiązałem go stosując następujący blok kodu:

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

Ta metoda nie jest to, co można by nazwać przekierowanie, ale na pewno usunie ciąg kwerendy. Wystarczy dodać ten wiersz na końcu kodu JavaScript:

window.location.search = ""; 

Albo

Dodaj to do końca swojej stronie HTML:

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

W zależności od tego, gdzie wstawić kod, czas usuwania łańcucha zapytania zmieni się.

0
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

Czy nie to sugerują już inne odpowiedzi? –

0

można spróbować Response.Redirect(Request.CurrentExecutionFilePath()); jego pracy dla mnie.