我很好奇在表單中使用多個強類型部分的方法是否回到部分包含View是正確的MVC方法來處理。主視圖綁定與略去了一些其他的屬性和數據註解以下模型:MVC 3 Razor Form Post帶有多個強類型部分視圖無法綁定
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包含在部分中。但是,如果我將各個模型添加到方法簽名中,它們會被填充。我意識到這是因爲當字段呈現ID被更改時,它們看起來像RegisterLog View的_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)模型的屬性,而不必爲了獲取值而將局部模型添加到方法簽名?這是在主視圖中使用強類型局部視圖的不好方法嗎?
如果有的話我會覺得做類似下面會比建議的更改一個更好的方法: @ Html.TextBoxFor(MOD => mod.LoginId,新{ID =「UserLogin_LoginId」}) 如果我一樣建議我最終將該部分特定於主視圖的強類型模型屬性。如果我有另一個想要使用相同部分的視圖,但是UserLogin屬性簡單地命名爲LoginCredentials?然後,我回過頭來看,我的主要觀點只是把標記放回原處,因爲它不能解決我原來的問題。 – Coderrob 2011-12-23 03:11:39
您是否找到解決此問題的方法? – Buzzer 2012-05-15 20:48:50