Suponha que eu tenha o 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; }
}
Na visão, posso renderizar parcial com
<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>
No parcial eu vou fazer
<%= Html.TextBox("Name", Model.Name) %>
or
<%= Html.TextBoxFor(x => x.Name) %>
No entanto, o problema é que ambos renderizarão name = "Name" enquanto eu preciso ter name = "Child.Name" para que o fichário do modelo funcione corretamente. Ou, name = "Child2.Name" quando eu renderizar a segunda propriedade usando a mesma exibição parcial.
Como faço para que minha visualização parcial reconheça automaticamente o prefixo necessário? Eu posso passar isso como um parâmetro, mas isso é muito inconveniente. Isso é ainda pior quando eu quero, por exemplo, renderizá-lo recursivamente. Existe uma maneira de renderizar visões parciais com um prefixo ou, melhor ainda, com a reconciliação automática da expressão lambda de chamada para que
<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>
adicionará automaticamente "Filho" correto. prefixo para as cadeias de nome / ID geradas?
Posso aceitar qualquer solução, incluindo mecanismos e bibliotecas de exibição de terceiros - eu realmente uso o Spark View Engine (eu "resolvo" o problema usando suas macros) e o MvcContrib, mas não encontrei uma solução lá. XForms, InputBuilder, MVC v2 - qualquer ferramenta / insight que forneça essa funcionalidade será excelente.
Atualmente, penso em codificar isso sozinho, mas parece uma perda de tempo, não acredito que esse material trivial ainda não esteja implementado.
Muitas soluções manuais podem existir e todas são bem-vindas. Por exemplo, eu posso forçar minhas parciais a serem baseadas em IPartialViewModel <T> {public string Prefix; Modelo T; } Mas prefiro uma solução existente / aprovada.
ATUALIZAÇÃO: há uma pergunta semelhante sem resposta aqui .
helper.ViewData.TemplateInfo.HtmlFieldPrefix
no formato de{oldprefix}.{newprefix}