Pergunta

Então, estou olhando para me mudar de MVC 1.0 para MVC 2.0 RTM. Uma das convenções que eu gostaria de começar é usar os ajudantes HTML fortemente tipo para gerar controles como caixas de texto.

No entanto, parece que não será um salto fácil. Eu tentei migrar meu primeiro formulário, substituindo linhas como esta:

<%= Html.TextBox("FirstName", Model.Data.FirstName, new {maxlength = 30}) %>

... para linhas como esta:

<%= Html.TextBoxFor(x => x.Data.FirstName, new {maxlength = 30}) %>

Anteriormente, isso mapeia seu modelo de exibição apropriado em uma postagem, usando a seguinte assinatura do método:

[HttpPost]
public ActionResult Registration(AccountViewInfo viewInfo)

Em vez disso, atualmente recebe um objeto vazio de volta. Acredito que a desconexão está no fato de passarmos o modelo de vista para um objeto agregado maior que tem alguns metadados da página e outras coisas divertidas junto com ele (daí x.Data.FirstName ao invés de x.FirstName).

Portanto, minha pergunta é: qual é a melhor maneira de usar os ajudantes fortemente ticados, enquanto ainda permite que a estrutura do MVC lançasse adequadamente a coleção de formulários para o meu modelo de visualização, como na linha original? Existe alguma maneira de fazer isso sem alterar o tipo agregado que passamos para a vista?

Obrigado!

ATUALIZAR: Portanto, o atributo bind funcionou bem, mas eu não gostava de como tive que aplicá -lo essencialmente a cada modelo de visualização postada. Acabei mudando a hierarquia de herança de modo que todos os nossos modelos de visualização herdem de uma classe base que contém conteúdo de página e outros meta -dados, em vez de ser uma propriedade agregada nomeada Data.

Foi útil?

Solução

public ActionResult Registration([Bind(Prefix = "data")] AccountViewInfo viewInfo);

Isso diz ao fichário que deve esperar que todos os valores comecem dados, então vai procurar Data.FirstName, etc.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top