Continous refresh of PartialView using ASP.NET MVC 3
本文关键字:NET MVC ASP using refresh of PartialView Continous | 更新日期: 2023-09-27 17:57:52
我正在使用ASP开发一个网站。NET MVC 3。
我有很多部分包含来自不同部门的新闻,如下图所示:
https://i.stack.imgur.com/G21qi.png
使用将部分添加到母版页
@Html.Action("_News", "Home", new { id = 1 })
其中id 1="Ledelsen",2="Omstillingen",依此类推。
我的控制器包含以下操作:
[ChildActionOnly]
public ActionResult _News(int id)
{
// controller logic to fetch correct data from database
return PartialView();
}
我已经启动并运行了CRUD,但我的问题是如何在不回发的情况下以设定的间隔刷新PartialViews?
我想我必须使用Javascript/jQuery来实现这一点,但我一直没能做到
有人能为我指明正确的方向吗?或者更好的是,提供一个如何做到这一点的例子?
提前感谢
编辑:只是澄清一下,我不想刷新整个页面,只想异步刷新部分视图
在您的局部视图中,我建议将整个东西包装在div:中
<div id="partial1">
在javascript中,您需要一个函数来使用AJAX将部分视图加载到div:中
$("#partial1").load("_News", { id="1"} );
这是在使用jQuery。这里有一些文档。基本上,这将替换由对_News操作的调用生成的视图指示的div。如果在javascript调用中添加一些逻辑,id可以变化。
然后将对load()
的调用封装在setTimeout()
:中
var t = setTimeout(function () {$("#partial1").load("_News", { id="1"} );}, 60000);
这将每60秒运行一次包含的功能。可以使用t
,因此可以在javascript代码中的任何位置使用clearTimeout(t)
来停止自动刷新。
编辑
这应该可以解决缓存问题。谢谢@iko的建议。我注意到你需要cache: false
才能工作。
var t = setTimeout(function () { $.ajax({
url: "_News",
data: { "id": "1" },
type: "POST",
cache: false,
success: function (data) {
$("#partial1").innerHTML = data;
}}); }, 60000);
我将向您介绍我对一个相关问题的回答"UpdatePanel";以Razor(mvc 3)为起点。注意,这与Steve Mallory的回答没有太大区别,但强调了其他一些要点。
然而,不同之处在于,如果要单独更新每个局部视图(仅更新id 1或仅更新id 2),则可能需要删除[ChildActionOnly]
属性。
此脚本可以放置在返回的分部中。
<script type="text/javascript">
setInterval(function()
{
$.load('<%= Url.Action("_News", "Home", new { id = Model.Id } ) %>', function(data) {
$('#partial_'@(Model.Id)').html(data);
});
}
, 30000);
</script>
<div id="partial_@(Model.Id)" />