"UpdatePanel" в Razor (mvc 3)
Есть ли что-то вроде UpdatePanel (в ASPX) для Razor?
Я хочу обновлять данные (например, таблицы, диаграммы,...) автоматически каждые 30 секунд. Аналогично нажатию на следующую ссылку каждые 30 секунд:
@Ajax.ActionLink("Refresh", "RefreshItems", new AjaxOptions() {
UpdateTargetId = "ItemList",
HttpMethod = "Post"})
Редактировать:
Я могу добавить, что ссылка действия представляет собой частичное представление.
Код в cshtml:
<div id="ItemList">
@Html.Partial("_ItemList", Model)
</div>
Код в контроллере:
[HttpPost]
public ActionResult RefreshItems() {
try {
// Fill List/Model
...
// Return Partial
return PartialView("_ItemList", model);
}
catch (Exception ex) {
return RedirectToAction("Index");
}
}
Было бы создать, если PartielView может обновить себя.
Ответы
Ответ 1
Вы можете попробовать что-то похожее на следующее, используя JQuery (не тестировалось)
<script type="text/javascript">
$(document).ready(function() {
setInterval(function()
{
// not sure what the controller name is
$.post('<%= Url.Action("Refresh", "RefreshItems") %>', function(data) {
// Update the ItemList html element
$('#ItemList').html(data);
});
}
, 30000);
});
</script>
Вышеприведенный код должен быть помещен на содержащую страницу, а не на страницу частичного просмотра. Имейте в виду, что частичный вид не является полной html-страницей.
Моя первоначальная догадка заключается в том, что этот script может быть помещен в частичный и изменен следующим образом. Убедитесь, что для типа данных ajax установлено значение html
.
<script type="text/javascript">
setInterval(function()
{
// not sure what the controller name is
$.post('<%= Url.Action("Refresh", "RefreshItems") %>', function(data) {
// Update the ItemList html element
$('#ItemList').html(data);
});
}
, 30000);
</script>
Другой альтернативой является сохранение javascript в отдельном файле js
и использование функции Jquery getScript в обратном вызове ajax.
Ответ 2
Если кто-то хочет получить полный код для самостоятельного частичного просмотра, посмотрите!
Код контроллера:
[HttpPost]
public ActionResult RefreshSelfUpdatingPartial() {
// Setting the Models Content
// ...
return PartialView("_SelfUpdatingPartial", model);
}
Код частичного (_SelfUpdatingPartial.cshtml):
@model YourModelClass
<script type="text/javascript">
setInterval(function () {
$.post('@Url.Action("RefreshSelfUpdatingPartial")', function (data) {
$('#SelfUpdatingPartialDiv').html(data);
}
);
}, 20000);
</script>
// Div
<div id="SelfUpdatingPartialDiv">
// Link to Refresh per Click
<p>
@Ajax.ActionLink("Aktualisieren", "RefreshFlatschels", new AjaxOptions() {
UpdateTargetId = "FlatschelList",
HttpMethod = "Post", InsertionMode = InsertionMode.Replace
})
</p>
// Your Code
// ...
</div>
Код для интеграции Partial в "Main" -View (ViewWithSelfupdatingPartial.cs):
@Html.Partial("_FlatschelOverview", Model)
Ответ 3
Ну, если вам не нужна экспария AJAX, чем использование тега HTML:
<meta http-equiv="refresh" content="30; URL=http://www.programmingfacts.com">
перейдите сюда: http://www.programmingfacts.com/auto-refresh-page-after-few-seconds-using-javascript/
Ответ 4
Тег <meta refresh ..>
в HTML будет работать для вас. Его лучший вариант
Ответ 5
Традиционные элементы управления не работают в ASP MVC
Вы можете сделать это с помощью таймеров JQuery http://plugins.jquery.com/project/timers
Другим вариантом может быть использование функции Delay
В вашей цели так же просто, как обновить всю страницу, эта ссылка SO будет представлять интерес: Автоматическое обновление в ASP.NET MVC
Надеюсь, что это поможет.