Làm cách nào để làm mới trang trong ASP.NET? (Hãy để nó tự tải lại bằng mã)


158

Làm cách nào để làm mới một trang trong ASP.NET? (Hãy để nó tự tải lại bằng mã)

Tôi thà không sử dụng Feedback.Redirect () vì tôi không biết trang tôi sẽ truy cập hay không, vì nó nằm trong sự kiểm soát của người dùng bên trong một phần web bên trong sharepoint.


2
Tôi không phải là OP, nhưng một lý do có thể là vì javascript có thể bị vô hiệu hóa
Nathan Koop

11
ASP.NET dựa vào javascript, vì vậy nếu người dùng bị vô hiệu hóa javascript thì có một vấn đề lớn hơn ...
jrummell

Câu trả lời:


45

Khi trang được hiển thị cho khách hàng, bạn chỉ có hai cách để làm mới. Một là Javascript

setTimeout("location.reload(true);", timeout);

Thứ hai là thẻ Meta:

<meta http-equiv="refresh" content="600">

Bạn có thể đặt khoảng thời gian làm mới ở phía máy chủ.


Tôi nên đặt setTimeout ở đâu?
Siti

Vui lòng xem câu trả lời từ @gaurav bên dưới để biết cách sử dụng .NET tốt Server.TransferRequest.
sfarbota

Điều này có thể đúng đối với một trang không sử dụng hỗ trợ của Máy chủ, tuy nhiên nó sai so với .Net Cách chỉ định là sử dụng Feedback.Redirect.
Phill Healey

394

Trong điều khiển người dùng của tôi, sau khi cập nhật dữ liệu, tôi thực hiện:

  Response.Redirect(Request.RawUrl);    

Điều đó đảm bảo rằng trang được tải lại và nó hoạt động tốt từ sự kiểm soát của người dùng. Bạn sử dụng RawURL và không Request.Url.AbsoluteUribảo toàn bất kỳ tham số GET nào có thể được bao gồm trong yêu cầu.

Bạn có thể không muốn sử dụng : __doPostBack, vì nhiều trang aspx hoạt động khác nhau khi thực hiện đăng lại.


4
@chris bạn sẽ sử dụng tham số thứ hai là Feedback.Redirect (Request.RawUrl, false)? Rõ ràng, đó là cách thực hành tốt nhất khi sử dụng reponse.redirect. Bạn nghĩ sao?
aleafonso

@aleafonso: Cá nhân tôi chưa bao giờ sử dụng tham số thứ 2 và không bao giờ có bất kỳ vấn đề nào do hậu quả, vì vậy tôi không chắc nó mua gì cho bạn. Nhưng có, theo tài liệu, bạn nên sử dụng tham số thứ 2, nhưng chỉ khi bạn sẽ gọi CompleteRequest - điều mà tôi chưa bao giờ bận tâm.
chris

Đôi khi bạn có thể cần AbsoluteUri, khi trang hiện tại có tham số Id (như câu hỏi ở đây trên stackoverflow). Hoặc là tôi sai?
CularBytes

2
@aleafonso là đúng - trừ khi bạn cần tạm dừng tất cả quá trình xử lý trên trang, đôi khi điều này cho thấy quy hoạch thiết kế kém, bạn nên chuyển sai thành thông số thứ hai. Không vượt qua thông số thứ 2 hoặc vượt qua đúng, sẽ ném một HTTPException và có thể ảnh hưởng đến hiệu suất và điền vào nhật ký sự kiện.
Ripside

45

Điều này có thể là muộn, nhưng tôi hy vọng nó sẽ giúp được ai đó đang tìm kiếm câu trả lời.

Bạn có thể sử dụng dòng sau để làm điều đó:

Server.TransferRequest(Request.Url.AbsolutePath, false);

Cố gắng tránh sử dụng Response.Redirectvì nó làm tăng các bước trong quy trình. Những gì nó thực sự làm là:

  1. Gửi lại trang với tiêu đề chuyển hướng
  2. Trình duyệt chuyển hướng đến URL đích.

Như bạn có thể thấy, kết quả tương tự mất 2 chuyến chứ không phải 1 chuyến.


2
+1 để chỉ ra rằng Server.Transfer () là cách hiệu quả hơn so với Phản hồi.Redirect ()
Jenny O'Reilly

Điều này hoạt động trong trường hợp Feedback.Redirect không hoạt động chính xác.
Ed Bayiates

Tôi thấy rằng điều này không xóa trạng thái của các trang, ví dụ: tập hợp .Textở trạng thái a TextBoxhoặc .Visibletrạng thái của a Button.
Đám mây

38

Thử cái này:

Response.Redirect(Request.Url.AbsoluteUri);

1
Nó sẽ chỉ gửi một trang chuyển hướng thay vì trang, gây ra một vòng lặp mà trình duyệt sẽ dừng lại khi thấy rằng nó sẽ không bao giờ có được một trang thực sự ...
Guffa

2
@Guffa phụ thuộc hoàn toàn vào bối cảnh sử dụng chuyển hướng. Nếu nó được sử dụng trong một khối hành động / mã được gọi cụ thể dựa trên một hành động hoặc điều kiện thì nó sẽ chỉ bắn một lần mỗi lần lặp và nếu được mã hóa chính xác trong sự cô lập.
Phill Healey

Điều này có thể dẫn đến mất dữ liệu phiên sau khi chuyển hướng. Có một cái gì đó về các url đủ điều kiện gây rối phiên.
Chris Cudmore

13

Sử dụng phương thức location.reload () của javascript .

<script type="text/javascript">
  function reloadPage()
  {
    window.location.reload()
  }
</script>

8

Có nhiều phương pháp khác nhau để làm mới trang trong asp.net như ...

Tập lệnh Java

 function reloadPage()
 {
     window.location.reload()
 }

Mã ẩn

Response.Redirect(Request.RawUrl)

Thẻ meta

<meta http-equiv="refresh" content="600"></meta>

Chuyển hướng trang

Response.Redirect("~/default.aspx"); // Or whatever your page url

6

Nếu bạn không muốn làm mới toàn bộ trang, vậy còn việc gói những gì bạn muốn làm mới bên trong UpdatePanel và sau đó thực hiện một postback không đồng bộ thì sao?


3

Cá nhân tôi cần đảm bảo trang giữ trạng thái, vì vậy tất cả các hộp văn bản và các trường nhập khác giữ lại giá trị của chúng. bằng cách làm mới meta, nó giống như một bài đăng mới, IsPostBack luôn sai vì vậy tất cả các điều khiển của bạn lại ở trạng thái khởi tạo. Để duy trì trạng thái, hãy đặt trạng thái này vào cuối Page_Load (). tạo một nút ẩn trên trang với một sự kiện được nối, một cái gì đó giống như butRefresh với sự kiện butRefresh_Click (...). Mã này đặt bộ hẹn giờ trên trang để kích hoạt một bài đăng giống như người dùng đã nhấp vào nút làm mới. tất cả các trạng thái và phiên được giữ lại. Thưởng thức! (PS bạn có thể cần đặt lệnh trong tiêu đề @Page EnableEventValidation = "false" nếu bạn gặp lỗi khi đăng lại.

//tell the browser to post back again in 5 seconds while keeping state of all controls
ClientScript.RegisterClientScriptBlock(this.GetType(), "refresh", "<script>setTimeout(function(){ " + ClientScript.GetPostBackClientHyperlink(butRefresh, "refresh") + " },5000);</script>");

2

Bạn không thể làm điều đó. Nếu bạn sử dụng chuyển hướng (hoặc bất kỳ kỹ thuật máy chủ nào khác), bạn sẽ không bao giờ gửi trang thực tế đến trình duyệt, chỉ các trang chuyển hướng.

Bạn phải sử dụng thẻ meta hoặc JavaScript để thực hiện việc này, để bạn có thể tải lại trang sau khi nó được hiển thị một lúc:

ScriptManager.RegisterStartupScript(this, GetType(), "refresh", "window.setTimeout('window.location.reload(true);',5000);", true);

2

Trong của bạn page_load, thêm điều này:

Response.CacheControl = "no-cache";
Response.AddHeader("Pragma", "no-cache");
Response.Expires = -1;

1
Response.Write("<script>window.opener.location.href = window.opener.location.href </script>");

1

Bạn có thể sử dụng 2 cách để giải quyết vấn đề này: 1) Sau thẻ head

<head> 
<meta http-equiv="refresh" content="600">
</head>

2) Nếu trang của bạn không có thẻ head, bạn phải sử dụng Javascript để triển khai

<script type="text/javascript">
  function RefreshPage()
  {
    window.location.reload()
  }
</script>

Danh bạ của tôi:

http://gola.vn


1

Cách chính xác duy nhất mà tôi có thể làm mới trang là thông qua JavaScript, nhiều câu trả lời .NET hàng đầu đã thất bại đối với tôi.

Response.Write("<script type='text/javascript'> setTimeout('location.reload(true); ', timeout);</script>");

Đặt mã ở trên vào sự kiện nhấn nút hoặc bất cứ nơi nào bạn muốn buộc làm mới trang.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.