ost do formulário do MVC 3 Razor com várias vistas parciais fortemente tipadas não vinculativas
Estou curioso para saber se a abordagem de usar várias parciais fortemente tipadas em um formulário que é postado de volta na parcial que contém View é a abordagem correta do MVC para fazer as coisas. A Visualização principal está vinculada ao seguinte modelo com várias outras propriedades e anotações de dados omitidas por questões de brevidade:
public class AccountSetup : ViewModelBase
{
public bool TermsAccepted { get; set; }
public UserLogin UserLogin { get; set; }
public SecurityQuestions SecurityQuestions { get; set; }
}
public class UserLogin
{
public string LoginId { get; set; }
public string Password { get; set; }
}
A marcação da tela principal Register.cshtml não está totalmente abaixo, mas é assim que as parciais são usadas abaixo:
@model Models.Account.AccountSetup
. . . <pretty markup> . . .
@using (Html.BeginForm("Register", "Account", FormMethod.Post))
{
. . . <other fields and pretty markup> . . .
@Html.Partial("_LoginAccount", Model.UserLogin)
@Html.Partial("_SecurityQuestions", Model.SecurityQuestions)
<input id="btnContinue" type="image" />
}
Apenas para referência, a exibição parcial de _LoginAccount está abaixo, com a marcação em excesso removid
@model Models.Account.UserLogin
<div>
@Html.TextBoxFor(mod => mod.LoginId)
@Html.PasswordFor(mod => mod.Password)
</div>
O problema está na postagem do formulário nas propriedades Register the AccountSetup e nulas que estavam contidas nas parciais. No entanto, se eu adicionar os modelos individuais à assinatura do método, eles serão preenchidos. Sei que é porque, quando os campos processam o ID, eles são alterados para que se pareçam com _LoginId para a Visualização do registro, para que não seja mapeado de volta ao modelo AccountSetup.
Não recupera valores para accountSetup.UserLogin ou accountSetup.SecurityQuestions
[HttpPost]
public ActionResult Register(AccountSetup accountSetup)
{
Retorna valores para userLogin e securityQuestions
[HttpPost]
public ActionResult Register(AccountSetup accountSetup, UserLogin userLogin, SecurityQuestions securityQuestions)
{
A questão é como mapear esses dados de volta para as propriedades do modelo Views (AccountSetup), sem precisar adicionar os modelos parciais à assinatura do método, apenas para recuperar os valores? Essa é uma péssima abordagem usando visualizações parciais fortemente tipadas em uma visualização principal?