C# 在回发时加载整个MVC视图,而不仅仅是部分视图
我正在尝试使用MVC4构建仪表板。我使用Render.Action()将仪表板小部件作为部分视图呈现,并将其填充到仪表板视图中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
仪表板小部件可以很好地创建只读小部件。但我需要创建一个具有搜索功能的仪表板小部件,所以它需要发回。 我尝试将部分视图嵌入带有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);
}