整个MVC视图加载回发,而不仅仅是部分视图

时间:2015-06-14 19:52:16

标签: c# asp.net-mvc asp.net-mvc-4

我正在尝试使用MVC4构建仪表板。我使用Render.Action()将仪表板小部件填充为部分视图,填充了我的仪表板视图。

<div class="row-fluid">
<div class="dashboard">
    <div class="dashboard2Col">
        <div class="dashboardCol">
            @for (int c1 = 0; c1 < Model.Count; c1 = c1 + 2)
            {
                Html.RenderAction("DashboardItem_" + Model[c1].DashboardCode, "MyDashboard", 
                    new { dashboardTitle = Model[c1].DashboardTitle });
            }
        </div>
        <div class="dashboardCol">
            @for (int c2 = 1; c2 < Model.Count; c2 = c2 + 2)
            {
                Html.RenderAction("DashboardItem_" + Model[c2].DashboardCode, "MyDashboard", 
                    new { dashboardTitle = Model[c2].DashboardTitle });
            }
        </div>
    </div>
</div>

每个仪表板小部件都是一个局部视图,它具有与之关联的控制器操作方法,具有[ChildActionOnly]属性。

 [ChildActionOnly]
    public ActionResult DashboardItem_AllEvents(string dashboardTitle)
    {
        DI_AllEvents_VM model = new DI_AllEvents_VM();
        model.DashboardTitle = dashboardTitle;
        model.Events = GetAllEvents().Where(x => x.IsUpdated == false).ToList();
        return View(model);
    }

    [HttpPost]
    public ActionResult DashboardItem_AllEvents(DI_AllEvents_VM model, FormCollection form)
    {
        foreach(var e in model.Events)
       {
            if(e.IsChecked)
            {
                var i = model.Events.Where(x => x.EventId == e.EventId).FirstOrDefault();
                i.IsUpdated = true;
            }
       }

        Session["Events"] = model.Events;
        var updatedEvents = GetAllEvents().Where(x => x.IsUpdated == false).ToList();
        model.Events = updatedEvents;
        return PartialView("DashboardItem_AllEvents", model);
    }

仪表板小部件适用于创建只读小部件。但我需要创建一个具有搜索功能的仪表板小部件,因此需要回发。 我尝试使用提交按钮在部分视图中嵌入部分视图。但是,当我单击提交按钮时,整个仪表板索引页面将重新加载,而不仅仅是仪表板小部件。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

研究主题“AJAX”。基本上,您最有可能想要编写捕获该表单的提交事件的javascript,并使用XMLHttpRequest()将其发送到服务器,并且服务器应仅回复该窗口小部件的数据或HTML fragmet。