2009-05-12 8 views
11

Ich habe ein Formular, das manchmal mit einigen Abfragezeichenfolgen-Parametern verknüpft wird. Das Problem besteht darin, dass der Abfragezeichenfolgenparameter immer noch vorhanden ist, wenn ich das Formular zurückgebe. Es ist nicht wirklich ein Problem, wie ich es eingerichtet habe, aber ich mag es einfach nicht dort zu sein, und könnte es als ein Problem sehen, wenn du in einer bestimmten Reihenfolge nach Eingaben suchen musstest.Gibt es eine Möglichkeit, Abfrage-String-Parameter beim Zurücksetzen zu löschen?

Gibt es eine Möglichkeit, diesen Abfragezeichenfolgenparameter auf einfache und saubere Weise zu löschen? Ich weiß, ich könnte die PostBackURL auf der Schaltfläche ändern, aber das scheint nicht zu effizient.

Antwort

12

Nein, ich habe keinen Weg gesehen, es ohne Umleitung zu löschen.

+1

gleich hier. –

+0

Gibt es eine saubere Möglichkeit, Response.Redirect() auf die Seite auszuführen, auf der Sie sich gerade befinden? –

+3

Versuchen Sie: Response.Redirect (Request.CurrentExecutionFilePath()) – rvarcher

3

Sie können in einigen Fällen die Server.Transfer()-Methode verwenden, die eine Überladung aufweist, mit der Sie angeben können, ob die Querystring- und Formulardaten beibehalten werden sollen oder nicht.

5

dies am Ende der Seite setzen?

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

Oder von Code-Behind: form1.Action = Request.Url.GetLeftPart (UriPartial.Path); – user764754

7

Ich denke, Sie haben Ihre eigene Frage beantwortet. Verwenden Sie die PostBackURL-Eigenschaft.

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

Oder so etwas wie

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

Ich gehe davon aus, dass Sie nicht auf Page.IsPostBack aus irgendeinem Grund verlassen können?

Wenn Sie serverseitig vorgehen, ist es einfach, in Ihren Methoden eine Prüfung auf IsPostBack hinzuzufügen (Page_Load, OnInit usw.) und nur die Querystrings zu bearbeiten, wenn es sich nicht um einen Post-Request handelt).

3

Ich kam in dem gleichen Problem und nach einiger Jagd im Web ich diesen Schnipsel gefunden:

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

nenne ich ClearQueryStrings() in meinem Page_Load, nachdem ich die ursprünglichen Abfrage-String-Parameter fertig bin zu verarbeiten. Wenn die Seite zurückbucht, sind die Parameter weg.

Original article is here.

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

den folgenden Code Clear Query String-Parameter verwenden.

// 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

Ich war mit demselben Problem fest.

Ich löste es den folgenden Codeblock mit:

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

Diese Methode ist nicht, was Sie eine Umleitung nennen würde, aber es wird auf jeden Fall die Query-String löschen. Fügen Sie einfach diese Zeile am Ende Ihres JavaScript-Code:

window.location.search = ""; 

Oder

diese an das Ende Ihrer HTML-Seite:

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

Je nachdem, wo Sie den Code einzufügen, Das Timing des Löschens der Abfragezeichenfolge ändert sich.

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

Schlägt das nicht schon die meisten anderen Antworten vor? –

0

Sie können Response.Redirect(Request.CurrentExecutionFilePath()); Sein versuchen, für mich zu arbeiten.