www update tools packs net mvc4 mvc language instalar asp asp.net-mvc-3

asp.net-mvc-3 - update - mvc 4+



ASP.NET MVC3 agrega un HtmlFieldPrefix al llamar a Controller.PartialView (2)

Aún mejor, puede establecer ViewData.TemplateInfo.HtmlFieldPrefix dentro de la acción del controlador,

public Actionresult MyAction() { ... ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix"; return PartialView("MyView", viewmodel); }

No es necesario ViewBag o una propiedad en su modelo de vista.

Estoy renderizando una vista parcial como parte de una solicitud de Ajax.

Cuando llamo a la vista parcial desde una vista:

int i=0; foreach(var rule in Model.Rules) { @Html.Partial("ValidationRuleRow", rule, new ViewDataDictionary { TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = string.Format("Rules[{0}]", i) } }) i++; }

Puedo configurar HtmlFieldPrefix para permitir el enlace apropiado del modelo.

Quiero que el usuario pueda agregar una nueva ValidationRuleRow sobre la marcha a través de ajax, como:

$.ajax({ type: "GET", url: "/Monitors/NewMonitorValidationRule", success: function (data, textStatus, jqXHR) { var element = $(data); $("#ValidationRuleContainer").append(element); } });

Entonces tengo una acción en mi controlador para obtener el HTML:

public ActionResult NewMonitorValidationRule() { ValidationRule rule = new ValidationRule{Id = TempSurrogateKey.Next}; var view = PartialView("ValidationRuleRow", rule); // CODE TO SET PartialView field prefix return view; }

El HTML devuelto no tiene un prefijo. ¿Hay alguna forma de establecer un prefijo al llamar a un Vista parcial desde una acción en un controlador?


Puede pasar esta información como parte del modelo de vista:

public ActionResult NewMonitorValidationRule() { ValidationRule rule = new ValidationRule{Id = TempSurrogateKey.Next}; // CODE TO SET PartialView field prefix rule.MyPrefix = "Rule[153]"; return PartialView("ValidationRuleRow", rule); }

y dentro de la vista parcial ValidationRuleRow.cshtml usa esta propiedad de modelo de vista para establecer el prefijo:

@{ if (!string.IsNullOrEmpty(Model.MyPrefix)) { ViewData.TemplateInfo.HtmlFieldPrefix = Model.MyPrefix; } }