tutorial sirve que para pages net mvc entre ejemplos diferencias asp asp.net asp.net-mvc razor asp.net-mvc-partialview actionresult

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.