【问题标题】:Updating partial view from controller从控制器更新部分视图
【发布时间】:2015-11-30 07:35:37
【问题描述】:

我已经阅读了一些关于如何更新局部视图的教程,但它们都以用户交互为起点(例如下拉更改将导致局部视图中的某些数据的更新)。我的情况不同:我试图从控制器开始更新部分视图,而不需要用户在 UI 上进行交互。如果我使用这样的代码:

    [HttpPost]
    public ActionResult PerformAction(MyModel mymodel)
    {
        //....do things

        return PartialView("Notification", mymodel);
    }

浏览器将仅显示部分视图。建议?谢谢

这是主视图:

@using System.Web.UI.WebControls
@model MyApplication.Models.Mymodel

@{
    ViewBag.Title = "Home Page";
}

<form class="float_left" method="post" action="@Url.Action("Start", "Home")">
    <fieldset>
        @Html.TextBoxFor(m => m.Username, new { Value = Model.Message })
        <input type="submit" value="Subscribe"/>
        <div id="notificationMessage">
            @{ Html.RenderPartial("~/Views/Home/PartialView.cshtml", new PartialViewModel()); }
        </div>
    </fieldset>
</form>

这里是部分:

@using System.Web.UI.WebControls
@model HostedExchangeListener.Models.PartialViewModel
@Html.TextBoxFor(m => m.Message, new { Value = Model.Message })

【问题讨论】:

  • 因为您正在返回 PartialView 听起来好像您想使用 AJAX 来呈现部分视图?所以它不会重新加载页面
  • 在我看到的教程中使用了 Ajax,但它假定页面上有一些用户交互。
  • 嗯,有几种方法,您可以在 DOM 加载时使用 ajax 加载到 Partial View 中,或者您可以只将模型传递给 partial。你能发布你想要渲染部分的视图以及你的部分吗?
  • 当我第一次加载页面时,部分视图是空的,没关系。但是我希望它根据控制器上的一些逻辑进行更新。视图非常简单(我将更新帖子以显示它们)
  • 什么时候更新?马上?或者当事情发生变化时?

标签: c# asp.net-mvc model-view-controller partial-views


【解决方案1】:

你需要做的事情是这样的:

查看

<div id="partialViewContent"> </div>

<script>
$(function () // Once the DOM is loaded
{
    setInterval(function(){ 
        $.get('@Url.Action("Action","Controller")', function(data) {
        $('#partialViewContent').html(data); // Replace whats in the div with the PartialView
    }, 5000); // Every 5 seconds
});

</script>

控制器

public ActionResult Action()
{
    var mymodel = new MyViewModel();
    //....do things
    return PartialView("Notification", mymodel);
}

【讨论】:

  • 这个解决方案并不能真正满足我的需求。如果我理解正确,它将每 5 秒调用一次我的操作,因此决定请求更新的是用户界面。我的问题是控制器是否可以决定更新部分视图。 (我的控制器监听外部服务,收到消息需要更新部分视图)
  • 您将需要 SignalR 之类的东西来更新视图。真的,这些信息应该在你的问题中。要将更新从控制器推送到视图,您可能需要对当前的实现进行一些修改。
猜你喜欢
  • 1970-01-01
  • 2023-03-18
  • 2013-11-13
  • 1970-01-01
  • 1970-01-01
  • 2017-12-13
  • 2015-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多