我需要从Ajax调用更新Multiple,我很困惑如何从Controller Action方法返回这些Multiple视图.
dna*_*oli 52
您只能从函数返回一个值,因此您无法从一个操作方法返回多个部分.
如果您尝试将两个模型返回到一个视图,请创建一个包含要发送的两个模型的视图模型,并将视图的模型设置为新的ViewModel.例如
您的视图模型如下所示:
public class ChartAndListViewModel
{
public List<ChartItem> ChartItems {get; set;};
public List<ListItem> ListItems {get; set;};
}
Run Code Online (Sandbox Code Playgroud)
然后您的控制器操作将是:
public ActionResult ChartList()
{
var model = new ChartAndListViewModel();
model.ChartItems = _db.getChartItems();
model.ListItems = _db.getListItems();
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
最后你的看法是:
@model Application.ViewModels.ChartAndListViewModel
<h2>Blah</h2>
@Html.RenderPartial("ChartPartialName", model.ChartItems);
@Html.RenderPartial("ListPartialName", model.ListItems);
Run Code Online (Sandbox Code Playgroud)
Sha*_*rpC 22
这里有一个非常好的例子....
http://rhamesconsulting.com/2014/10/27/mvc-updating-multiple-partial-views-from-a-single-ajax-action/
创建一个帮助方法来打包局部视图...
public static string RenderRazorViewToString(ControllerContext controllerContext,
string viewName, object model)
{
controllerContext.Controller.ViewData.Model = model;
using (var stringWriter = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(controllerContext, viewName);
var viewContext = new ViewContext(controllerContext, viewResult.View, controllerContext.Controller.ViewData, controllerContext.Controller.TempData, stringWriter);
viewResult.View.Render(viewContext, stringWriter);
viewResult.ViewEngine.ReleaseView(controllerContext, viewResult.View);
return stringWriter.GetStringBuilder().ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
创建一个控制器动作来捆绑多个部分视图....
[HttpPost]
public JsonResult GetResults(int someExampleInput)
{
MyResultsModel model = CalculateOutputData(someExampleInput);
var totalValuesPartialView = RenderRazorViewToString(this.ControllerContext, "_TotalValues", model.TotalValuesModel);
var summaryValuesPartialView = RenderRazorViewToString(this.ControllerContext, "_SummaryValues", model.SummaryValuesModel);
return Json(new { totalValuesPartialView, summaryValuesPartialView });
}
Run Code Online (Sandbox Code Playgroud)
如果需要,每个局部视图都可以使用自己的模型,或者可以捆绑到与此示例中相同的模型中.
然后使用AJAX调用一次更新所有部分:
$('#getResults').on('click', function () {
$.ajax({
type: 'POST',
url: "/MyController/GetResults",
dataType: 'json',
data: {
someExampleInput: 10
},
success: function (result) {
if (result != null) {
$("#totalValuesPartialView").html(result.totalValuesPartialView);
$("#summaryValuesPartialView").html(result.summaryValuesPartialView);
} else {
alert('Error getting data.');
}
},
error: function () {
alert('Error getting data.');
}
});
});
Run Code Online (Sandbox Code Playgroud)
如果要将此方法用于GET请求,则需要删除[HttpPost]装饰器并添加JsonRequestBehavior.AllowGet到返回的JsonResult:
return Json(new { totalValuesPartialView, summaryValuesPartialView }, JsonRequestBehavior.AllowGet);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
67844 次 |
| 最近记录: |