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;
}
}