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

C# 在回发时加载整个MVC视图,而不仅仅是部分视图,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我正在尝试使用MVC4构建仪表板。我使用Render.Action()将仪表板小部件作为部分视图呈现,并将其填充到仪表板视图中 仪表板小部件可以很好地创建只读小部件。但我需要创建一个具有搜索功能的仪表板小部件,所以它需要发回。 我尝试将部分视图嵌入带有submit按钮的表单中。但是,当我单击submit按钮时,整个仪表板索引页面将重新加载,而不仅仅是仪表板小部件 有什么建议吗?研究“AJAX”主题。基本上,您很可能希望编写javascript来捕获该表单的提交事件,并使用XMLHttpReque

我正在尝试使用MVC4构建仪表板。我使用Render.Action()将仪表板小部件作为部分视图呈现,并将其填充到仪表板视图中


仪表板小部件可以很好地创建只读小部件。但我需要创建一个具有搜索功能的仪表板小部件,所以它需要发回。 我尝试将部分视图嵌入带有submit按钮的表单中。但是,当我单击submit按钮时,整个仪表板索引页面将重新加载,而不仅仅是仪表板小部件


有什么建议吗?

研究“AJAX”主题。基本上,您很可能希望编写javascript来捕获该表单的提交事件,并使用XMLHttpRequest()将其发送到服务器,服务器应该只回复该小部件的数据或HTML框架。

我认为您混淆了MVC框架和WebForms的工作方式。传统ASP.NET意义上没有“回发”。话虽如此,您是否研究过Ajax助手?例如:您的整个设置听起来像是您应该使用SPA而不是MVC。您的表单是否看起来像
@using(Html.BeginForm(
)?尝试将其更改为
@using(Ajax.BeginForm(
)(参数也需要更改。“搜索功能,因此需要发布”这是不正确的。搜索并不意味着发布。您可以删除
表单
,然后使用
ajax
直接使用get(而不是post)获取内容,并返回
PartialView
@freedomn-m:感谢您的建议。我删除了表单。我尝试在单击“搜索”时触发ajax get请求按钮并返回部分视图。在第一次单击按钮触发GET请求时,它与预期一样工作。但是,在随后的按钮单击中,它不起作用。当我第二次、第三次单击按钮时,不会发生任何事情。请提出建议。我解决了我的问题。解决方法与您建议的相同。谢谢!
<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]
    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);
    }