Как обновить страницу в ASP.NET? (Пусть он перезагрузится сам по коду)
-
05-07-2019 - |
Вопрос
Как обновить страницу в ASP.NET? (Пусть он перезагрузится сам по коду)
Я бы предпочел не использовать Response.Redirect (), потому что я не знаю, на какой странице я буду находиться, так как она находится внутри пользовательского элемента управления внутри веб-части внутри sharepoint.
Решение
После отображения страницы клиенту у вас есть только два способа принудительного обновления. Одним из них является Javascript
setTimeout("location.reload(true);", timeout);
Вторым является метатег:
<meta http-equiv="refresh" content="600">
Вы можете установить интервалы обновления на стороне сервера.
Другие советы
В моих пользовательских элементах управления после обновления данных я делаю:
Response.Redirect(Request.RawUrl);
Это гарантирует, что страница будет перезагружена, и она отлично работает из пользовательского элемента управления. Вы используете RawURL, а не Request.Url.AbsoluteUri
для сохранения любых параметров GET, которые могут быть включены в запрос.
Вы, вероятно, не хотите использовать: __ doPostBack
, так как многие страницы aspx ведут себя по-разному при выполнении обратной передачи.
Это может быть поздно, но я надеюсь, что это поможет кому-то, кто ищет ответ.
Для этого вы можете использовать следующую строку:
Server.TransferRequest(Request.Url.AbsolutePath, false);
Старайтесь не использовать Response.Redirect
, поскольку это увеличивает количество шагов в процессе. Что он на самом деле делает:
Как видите, один и тот же результат требует 2 поездки, а не 1 поездки.
Попробуйте это:
Response.Redirect(Request.Url.AbsoluteUri);
Используйте location.reload () метод javascript.
<script type="text/javascript">
function reloadPage()
{
window.location.reload()
}
</script>
Существуют различные способы обновления страницы в 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
Если вы не хотите выполнять полное обновление страницы, то как насчет того, чтобы обернуть то, что вы хотите обновить, внутри UpdatePanel, а затем выполнить асинхронную обратную передачу?
Мне лично нужно убедиться, что страница сохраняет состояние, чтобы все текстовые поля и другие поля ввода сохраняли свои значения. выполняя метаобновление, это похоже на новый пост, IsPostBack всегда ложен, поэтому все ваши элементы управления снова находятся в инициализированном состоянии. Чтобы сохранить состояние, поместите это в конец вашего Page_Load (). создайте скрытую кнопку на странице с подключенным событием, что-то вроде butRefresh с событием butRefresh_Click (...). Этот код устанавливает таймер на странице для запуска обратной передачи так же, как пользователь сам нажимает кнопку обновления. все состояние и сеанс сохраняются. Наслаждайтесь! (P.S. вам может понадобиться поместить директиву в заголовок @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>");
Ты не можешь этого сделать. Если вы используете перенаправление (или любой другой метод сервера), вы никогда не отправите реальную страницу в браузер, только страницы перенаправления.
Для этого вам нужно либо использовать метатег, либо JavaScript, чтобы вы могли перезагрузить страницу после того, как она некоторое время отображалась:
ScriptManager.RegisterStartupScript(this, GetType(), "refresh", "window.setTimeout('window.location.reload(true);',5000);", true);
Добавьте в page_load
следующее:
Response.CacheControl = "no-cache";
Response.AddHeader("Pragma", "no-cache");
Response.Expires = -1;
Response.Write("<script>window.opener.location.href = window.opener.location.href </script>");
Вы можете использовать 2 способа решения этой проблемы: 1) После заголовка тега
<head>
<meta http-equiv="refresh" content="600">
</head>
2) Если на вашей странице нет тега head, вы должны использовать Javascript для реализации
<script type="text/javascript">
function RefreshPage()
{
window.location.reload()
}
</script>
Мой контакт:
Единственный правильный способ, которым я мог обновить страницу, был через JavaScript, многие из топовых ответов .NET потерпели неудачу.
Response.Write("<script type='text/javascript'> setTimeout('location.reload(true); ', timeout);</script>");
Поместите приведенный выше код в событие нажатия кнопки или в любое место, где вы хотите принудительно обновить страницу.