asp.net - sirve - web forms c# tutorial
Modelo equivalente personalizado de ActionResult para todas las visitas parciales (1)
Puede inicializar el objeto MultiplePartialViewsResult de la siguiente manera con nuevas instancias propias de ViewData / ViewData.Model (funciona bien para mí):
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 } } }
);
Resultado de acción personalizado:
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);
}
}
}
Controlador:
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 } } }
);
}
Puntos de vista:
Índice:
@Html.Action("FakeAction")
ColumnSumView.cshtml / RowSumView.cshtml:
@model List<double>
<ul>
@foreach(double item in Model) {
<li>@item</li>
}
</ul>
ActionResult
siguiente ActionResult
personalizado que devuelve múltiples vistas parciales.
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);
}
}
}
Y luego lo uso de la siguiente manera:
return new MultiplePartialViewsResult(
PartialView("~/Views/RowSumView.cshtml", new List<double>() { 1.0 }),
PartialView("~/Views/ColumnSumView.cshtml", new List<double>() { 2.0 }));
Pero si coloco un punto de interrupción en el constructor MultiplePartialViewsResult
, veo que el modelo en ambos casos es igual a 2.0
. Anula todos los modelos con el último modelo especificado en una matriz.
Intente crear un par de vistas parciales en el método y asignarlo a la variable. Entonces te darás cuenta de que todos comparten modelo equivalente.