小编典典

Razor(mvc 3)中的“ UpdatePanel”

ajax

是否有类似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可以刷新自身,它将被创建。


阅读 275

收藏
2020-07-26

共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页面。

我最初的猜测是可以将该脚本放置在局部脚本中,并进行如下修改。确保将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文件中,并在ajax成功回调中使用Jquery
getScript
函数。

2020-07-26