Custom ActionResult equivalent Model for all PartialViews
You can initialize the MultiplePartialViewsResult object in the following manner with new own ViewData / ViewData.Model instances (works fine for me):
return new MultiplePartialViewsResult( //PartialView("~/Views/RowSumView.cshtml", new List<double>() { 1.0 }), //PartialView("~/Views/ColumnSumView.cshtml", new List<double>() { 2.0 }) new PartialViewResult() { ViewName = "~/Views/RowSumView.cshtml", ViewData = new ViewDataDictionary() { Model = new List<double>() { 1.0 } } }, new PartialViewResult() { ViewName = "~/Views/ColumnSumView.cshtml", ViewData = new ViewDataDictionary() { Model = new List<double>() { 2.0 } } });
Custom Action Result:
public class MultiplePartialViewsResult : ActionResult { private const string Separator = "-"; private PartialViewResult[] _partialViews; public MultiplePartialViewsResult(params PartialViewResult[] partialViews) { _partialViews = partialViews; } public override void ExecuteResult(ControllerContext context) { foreach(var partialView in _partialViews) { partialView.ExecuteResult(context); context.HttpContext.Response.Output.Write(Separator); } }}
Controller:
public ActionResult Index() { return View();}public ActionResult FakeAction() { return new MultiplePartialViewsResult( //PartialView("~/Views/RowSumView.cshtml", new List<double>() { 1.0 }), //PartialView("~/Views/ColumnSumView.cshtml", new List<double>() { 2.0 }) new PartialViewResult() { ViewName = "~/Views/RowSumView.cshtml", ViewData = new ViewDataDictionary() { Model = new List<double>() { 1.0 } } }, new PartialViewResult() { ViewName = "~/Views/ColumnSumView.cshtml", ViewData = new ViewDataDictionary() { Model = new List<double>() { 2.0 } } } );}
Views:
Index:
@Html.Action("FakeAction")
ColumnSumView.cshtml / RowSumView.cshtml:
@model List<double><ul> @foreach(double item in Model) { <li>@item</li> }</ul>