2011-11-21 19 views
13

Có cách nào để buộc đăng lại trong mã không?Buộc đăng lại

Tôi đang tìm cách ép buộc đăng lại từ một phương thức trong mã C# phía sau ứng dụng web asp.net của tôi.

+1

Bạn có thể cụ thể hơn không - và cho chúng tôi biết bạn đã thử phương pháp tiếp cận nào cho đến nay? –

+1

eh, một postback là từ khách hàng (trình duyệt) đến máy chủ. Vì vậy, mã C# (chạy trên máy chủ) không thể làm điều đó. –

+0

Tôi nghĩ câu hỏi của bạn tương tự như câu hỏi được nêu ra ở đây [http://stackoverflow.com/questions/1418532/how-to-force-a-postback-with-asp-net-and-c-sharp) – seanzi

Trả lời

9

Một postback được kích hoạt sau khi gửi biểu mẫu vì vậy nó liên quan đến một hành động của khách hàng ... hãy nhìn vào đây để giải thích: ASP.NET - Is it possible to trigger a postback from server code?

và ở đây cho một giải pháp: http://forums.asp.net/t/928411.aspx/1

+0

Đã hoạt động! Cảm ơn! –

+2

Đối với những người sử dụng phiên bản .NET mới hơn, bạn phải sử dụng 'Page.ClientScript.GetPostBackEventReference' vì 'this.GetPostBackEventReference (...)' đã lỗi thời. Cũng có thể là 'Page.ClientScript.RegisterStartupScript (...)'. – AzNjoE

1

Không, không phải từ mã phía sau. Postback là một yêu cầu được khởi tạo từ một trang trên máy khách trở lại chính nó trên máy chủ bằng cách sử dụng phương thức POST của Http. Ở phía máy chủ, bạn có thể yêu cầu chuyển hướng nhưng sẽ là yêu cầu GET của Http.

0

Bạn có thể tự gọi phương thức gọi bởi PostBack từ sự kiện Page_Load:

public void Page_Load(object sender, EventArgs e) 
{ 
    MyPostBackMethod(sender, e); 
} 

Nhưng nếu bạn có nghĩa là nếu bạn có thể có các thiết lập Page.IsPostBack tài sản để true mà không bài thực trở lại, thì câu trả lời là không.

0

Bạn có thể sử dụng điều khiển giới hạn dữ liệu như Repeater hoặc ListView, liên kết lại với danh sách thuộc tính điều khiển nếu cần và để cho phép tạo điều khiển động.

Thay vào đó, bạn có thể sử dụng Response.Redirect(".") để tải lại cùng một trang.

6

Bạn có thể thử chuyển hướng đến cùng một trang.

Response.Redirect(Request.RawUrl); 
+0

Nhưng sau đó các giá trị biểu mẫu bị mất ... –

+0

@Protectorone không trừ khi bạn ViewState [] chúng đầu tiên và tải lại trên postback tiếp theo trong Page_Load() – Fandango68

4

đơn giản:

ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "DoPostBack", "__doPostBack(sender, e)", true); 
0

Bằng cách sử dụng Server.Transfer ("YourCurrentPage.aspx"); chúng ta có thể dễ dàng đạt được điều này và nó tốt hơn Response.Redirect(); coz Server.Transfer() sẽ giúp bạn tiết kiệm cho chuyến đi khứ hồi.

+0

Điều này không đặt lại các trường biểu mẫu? Tôi đoán nó giống như một cuộc gọi trang mới có nghĩa là người dùng đầu vào như bộ lọc sẽ được hoàn tác (nếu chúng không được lưu trữ trong phiên). – Undercover1989

1

Đây là giải pháp từ http://forums.asp.net/t/928411.aspx/1 như đã đề cập bởi mamoo - chỉ trong trường hợp trang web ngoại tuyến. Làm việc tốt cho tôi.

StringBuilder sbScript = new StringBuilder(); 

sbScript.Append("<script language='JavaScript' type='text/javascript'>\n"); 
sbScript.Append("<!--\n"); 
sbScript.Append(this.GetPostBackEventReference(this, "PBArg") + ";\n"); 
sbScript.Append("// -->\n"); 
sbScript.Append("</script>\n"); 

this.RegisterStartupScript("AutoPostBackScript", sbScript.ToString()); 
Các vấn đề liên quan