2009-05-12 23 views
11

Tôi có một biểu mẫu đôi khi được liên kết với một số tham số chuỗi truy vấn. Vấn đề là khi tôi đăng lại biểu mẫu, tham số chuỗi truy vấn vẫn còn đó. Nó không thực sự là một vấn đề theo cách tôi có nó thiết lập, nhưng tôi chỉ không thích nó đang có, và có thể thấy nó là một vấn đề nếu bạn cần phải kiểm tra đầu vào theo một thứ tự nhất định.Có cách nào để xóa các tham số chuỗi truy vấn khi đăng lại không?

Có cách nào để xóa thông số chuỗi truy vấn đó một cách dễ dàng, gọn gàng không? Tôi biết tôi có thể thay đổi PostBackURL trên nút, nhưng điều đó có vẻ không hiệu quả lắm.

Trả lời

12

Không, tôi chưa thấy cách nào để xóa nó mà không có chuyển hướng.

+1

giống tại đây. –

+0

Có cách nào sạch sẽ để thực hiện Response.Redirect() cho trang bạn đang truy cập không? –

+3

Hãy thử: Response.Redirect (Request.CurrentExecutionFilePath()) – rvarcher

3

Bạn có thể trong một số trường hợp sử dụng phương pháp Server.Transfer(), có quá tải cho phép bạn chỉ định liệu chuỗi truy vấn và dữ liệu biểu mẫu có nên được giữ nguyên hay không.

5

đặt mã này ở cuối trang của bạn?

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

Hoặc từ mã sau: form1.Action = Request.Url.GetLeftPart (UriPartial.Path); – user764754

7

Tôi nghĩ bạn đã trả lời câu hỏi của riêng bạn. Sử dụng thuộc tính PostBackURL.

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

Hoặc một cái gì đó giống như

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

Tôi cho rằng bạn không thể dựa vào Page.IsPostBack vì một lý do?

Nếu những gì bạn đang làm là phía máy chủ, thì việc thêm IsPostBack vào phương thức của bạn (Page_Load, OnInit, v.v.) cũng chỉ đơn giản là xử lý truy vấn nếu nó không phải là bài đăng (tức là yêu cầu ban đầu)).

3

Tôi vừa bắt gặp cùng một vấn đề và sau khi một số săn bắn trên Web tôi thấy đoạn này:

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

tôi gọi ClearQueryStrings() trong Page_Load của tôi sau khi tôi thực hiện xử lý các thông số chuỗi truy vấn ban đầu. Khi trang đăng lại, các tham số biến mất.

Original article is here.

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

Sử dụng đoạn mã sau để rõ ràng Query String Parameters.

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

Tôi đã gặp sự cố tương tự.

Tôi giải quyết nó bằng cách sử dụng khối mã sau:

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

Phương pháp này không phải là những gì bạn thường gọi là chuyển hướng, nhưng nó chắc chắn sẽ xóa chuỗi truy vấn. Đơn giản chỉ cần thêm dòng này vào cuối mã JavaScript của bạn:

window.location.search = ""; 

Hoặc

Thêm phần này vào cuối trang HTML của bạn:

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

Tùy thuộc vào nơi bạn chèn đoạn code, thời gian xóa chuỗi truy vấn sẽ thay đổi.

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

Đây không phải là điều mà hầu hết các câu trả lời khác đã đề xuất chưa? –

0

Bạn có thể thử Response.Redirect(Request.CurrentExecutionFilePath()); Làm việc cho tôi.

Các vấn đề liên quan