MVC 3 Razor Form Post с несколькими строго типизированными частичными представлениями без привязки

Мне любопытно, является ли подход с использованием нескольких строго типизированных партиалов в форме, которая отправляет обратно в партиал, содержащий представление, правильным подходом MVC к выполнению задач. Основное представление связано со следующей моделью с некоторыми другими свойствами и аннотациями к данным, опущенными для краткости:

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

Разметка основного представления Register.cshtml не полностью приведена ниже, но вот как используются частичные данные ниже:

@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" />
}

Для справки ниже приведено частичное представление _LoginAccount, без лишней разметки.

@model Models.Account.UserLogin

<div>
     @Html.TextBoxFor(mod => mod.LoginId)

     @Html.PasswordFor(mod => mod.Password)
</div>

Проблема заключается в отправке формы для регистрации, свойства AccountSetup имеют значение null, которые содержались в партиалах. Однако, если я добавляю отдельные модели в сигнатуру метода, они заполняются. Я понимаю, это потому, что, когда поля отображают идентификатор, изменяется так, что они выглядят как _LoginId для представления реестра, поэтому он не отображается обратно в модель AccountSetup.

Не возвращает значения для accountSetup.UserLogin или accountSetup.SecurityQuestions

    [HttpPost]
    public ActionResult Register(AccountSetup accountSetup)
    {

Возвращает значения для userLogin и securityQuestions

    [HttpPost]
    public ActionResult Register(AccountSetup accountSetup, UserLogin userLogin, SecurityQuestions securityQuestions)
    {

Вопрос в том, как их сопоставить с соответствующими свойствами модели Views (AccountSetup) без необходимости добавлять частичные модели в сигнатуру метода только для того, чтобы вернуть значения? Это плохой подход с использованием строго типизированных частичных представлений в основном представлении?

7
задан Coderrob 21 December 2011 в 15:21
поделиться