Як оновити сторінку в ASP.NET? (Нехай він перезавантажується за кодом)


158

Як оновити сторінку в ASP.NET? (Нехай він перезавантажується за кодом)

Я вважаю за краще не використовувати Response.Redirect (), тому що я не знаю, чи буде сторінка, на якій я буду, оскільки вона знаходиться в контролі користувача всередині веб-частини всередині Sharepoint.


2
Я не ОП, але одна причина може бути через те, що javascript можна відключити
— Nathan Koop

11
ASP.NET покладається на javascript, тому якщо у користувача відключений javascript, існує більша проблема ...
— jrummell

Відповіді:


45

Після того, як сторінка буде надана клієнтові, у вас є лише два способи примусити оновити. Один - JavaScript

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

Другий - метатег:

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

Ви можете встановити інтервали оновлення на стороні сервера.


куди мені поставити setTimeout?
— Сіті

Будь ласка, дивіться відповідь від @gaurav нижче, щоб вдало це зробити в .NET, використовуючи Server.TransferRequest.
— sfarbota

Це може бути правильним для сторінки, яка не підтримує серверну сторону, однак вона неправильна стосовно вказаного. Net Правильним способом є використання Response.Redirect.
— Філл Хелі

394

Після керування користувачами після оновлення даних я роблю:

  Response.Redirect(Request.RawUrl);    

Це гарантує перезавантаження сторінки, і вона працює чудово від контролю користувача. Ви використовуєте RawURL і не Request.Url.AbsoluteUriзберігаєте жодних параметрів GET, які можуть бути включені в запит.

Напевно, ви не хочете користуватися:, __doPostBackоскільки багато сторінок aspx поводяться по-різному під час поштової трансляції.


4
@chris Ви б використовували другий параметр як Response.Redirect (Request.RawUrl, false)? Мабуть, це найкраща практика при використанні reponse.redirect. Що ти думаєш?
— алеафонсо

@aleafonso: Я ніколи особисто не використовував 2-й параметр і ніколи не мав жодних проблем, як наслідок, тому я не впевнений, що він купує у вас. Але так, згідно з документацією, ви повинні використовувати другий параметр, але тільки якщо ви збираєтесь викликати CompleteRequest - який я ніколи не турбував.
— chris

Іноді вам може знадобитися AbsoluteUri, коли на поточній сторінці є параметр Id (наприклад, QuesId тут у stackoverflow). Або я помиляюся?
— CularBytes

2
@aleafonso має рацію - якщо вам не потрібно зупиняти всю обробку сторінки, що іноді вказує на неправильне планування дизайну, ви повинні передавати помилку як другу парам. Не передаючи 2-й парам або передаючи істину, кидає HttpException і може впливати на продуктивність та заповнювати журнали подій.
— Ріпсайд

45

Це може пізно, але я сподіваюся, що це допоможе тому, хто шукає відповіді.

Для цього ви можете використовувати наступний рядок:

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

Постарайтеся уникати використання, Response.Redirectоскільки це збільшує кроки в процесі. Насправді це:

  1. Відсилає сторінку назад із заголовком перенаправлення
  2. Браузер перенаправляє до цільової URL-адреси.

Як бачите, такий же результат потребує 2 поїздки, а не 1 поїздки.


2
+1 за вказівку, що Server.Transfer () - це більш ефективний спосіб, ніж Response.Redirect ()
— Дженні О'Рейлі

Це спрацювало у випадках, коли Response.Redirect працював неправильно.
— Ед Байятес

Я виявив, що це не дозволяє зрозуміти стан сторінок, наприклад, набір .Textу a TextBoxабо .Visibleстатус а Button.
— Хмара

38

Спробуйте це:

Response.Redirect(Request.Url.AbsoluteUri);

1
Він буде просто надіслати сторінку переадресації замість сторінки, що спричинить цикл, який браузер зупинить, коли побачить, що він ніколи не отримає справжню сторінку ...
— Guffa

2
@Guffa, що повністю залежить від контексту, в якому використовується переспрямування. Якщо він використовується в блоці дії / коду, який спеціально викликається на основі дії чи умови, він запускається лише раз на кожну ітерацію та, якщо зашифровано правильно, ізольовано.
— Філл Хелі

Це може призвести до втрати даних про сеанс після переадресації. Існує щось про повністю кваліфіковані URL-адреси, які заплутують сесії.
— Кріс Кадмор


8

Існують різні методи оновлення сторінки на asp.net, як ...

Java Script

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

Код позаду

Response.Redirect(Request.RawUrl)

Метатег

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

Перенаправлення сторінки

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

6

Якщо ви не хочете оновлювати повну сторінку, то як бути з тим, як обгортати те, що ви хочете оновити всередині UpdatePanel, а потім робити асинхронний поштовий зворотній зв'язок?


3

Мені особисто потрібно переконатися, що сторінка зберігає стан, тому всі текстові поля та інші поля введення зберігають свої значення. виконуючи мета-оновлення, це як нова публікація, IsPostBack завжди помилковий, тому всі ваші елементи керування знову знаходяться в ініціалізованому стані. Щоб зберегти стан, поставте це в кінці сторінки Page_Load (). створіть на сторінці приховану кнопку із підключеною подією, щось на зразок butRefresh with event butRefresh_Click (...). Цей код встановлює таймер на сторінці, щоб запустити поштовий відкат, як користувач натискав кнопку оновлення. весь стан та сесія зберігаються. Насолоджуйтесь! (PS вам може знадобитися помістити директиву в заголовок @Page EnableEventValidation = "false", якщо ви отримаєте помилку під час зворотного зв'язку.

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

Ви не можете цього зробити. Якщо ви використовуєте переспрямування (або будь-яку іншу техніку сервера), ви ніколи не надсилатимете фактичну сторінку в браузер, а лише сторінки переспрямування.

Для цього вам потрібно використовувати мета-тег або JavaScript, щоб ви могли перезавантажити сторінку після її відображення на деякий час:

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

2

У ваших page_load, додайте це:

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


1

Ви можете використати 2 способи вирішення цієї проблеми: 1) Після заголовка заголовка

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

2) Якщо на вашій сторінці немає заголовка, ви повинні використовувати Javascript для реалізації

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

Мій контакт:

http://gola.vn


1

Єдиний правильний спосіб оновлення сторінки - це через JavaScript, для мене не вдалося отримати багато відповідей .NET.

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

Введіть наведений вище код у подію натискання кнопки або в будь-якому місці, де ви хочете змусити оновити сторінку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.