Supongamos que tengo ViewModel como
public class AnotherViewModel
{
public string Name { get; set; }
}
public class MyViewModel
{
public string Name { get; set; }
public AnotherViewModel Child { get; set; }
public AnotherViewModel Child2 { get; set; }
}
En la vista puedo renderizar un parcial con
<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>
En el parcial lo haré
<%= Html.TextBox("Name", Model.Name) %>
or
<%= Html.TextBoxFor(x => x.Name) %>
Sin embargo, el problema es que ambos representarán name = "Name" mientras que yo necesito tener name = "Child.Name" para que la carpeta de modelos funcione correctamente. O, name = "Child2.Name" cuando renderizo la segunda propiedad usando la misma vista parcial.
¿Cómo hago para que mi vista parcial reconozca automáticamente el prefijo requerido? Puedo pasarlo como parámetro, pero esto es demasiado inconveniente. Esto es aún peor cuando quiero, por ejemplo, renderizarlo de forma recursiva. ¿Hay alguna manera de representar vistas parciales con un prefijo o, mejor aún, con la reconición automática de la expresión lambda de llamada para que
<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>
agregará automáticamente el "Niño" correcto. prefijo a las cadenas de nombre / identificación generadas?
Puedo aceptar cualquier solución, incluidos los motores de vista de terceros y las bibliotecas. De hecho, uso Spark View Engine ("resuelvo" el problema usando sus macros) y MvcContrib, pero no encontré una solución allí. XForms, InputBuilder, MVC v2: cualquier herramienta / conocimiento que proporcione esta funcionalidad será excelente.
Actualmente pienso en codificar esto yo mismo, pero parece una pérdida de tiempo, no puedo creer que estas cosas triviales no estén implementadas.
Pueden existir muchas soluciones manuales, y todas son bienvenidas. Por ejemplo, puedo forzar que mis parciales se basen en IPartialViewModel <T> {prefijo de cadena pública; Modelo T; }. Pero prefiero alguna solución existente / aprobada.
ACTUALIZACIÓN: hay una pregunta similar sin respuesta aquí .
helper.ViewData.TemplateInfo.HtmlFieldPrefix
en la forma de{oldprefix}.{newprefix}