asp.net-mvc-3 – 具有多个强类型部分视图的MVC 3 Razor表格帖子没有绑定

前端之家收集整理的这篇文章主要介绍了asp.net-mvc-3 – 具有多个强类型部分视图的MVC 3 Razor表格帖子没有绑定前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我很好奇在一个回复到包含部分View的表单中使用多个强类型部分的方法是否是正确的MVC处理方法.为简洁起见,主视图与以下模型绑定,其中包含其他几个属性和数据注释:
  1. public class AccountSetup : viewmodelBase
  2. {
  3. public bool TermsAccepted { get; set; }
  4. public UserLogin UserLogin { get; set; }
  5. public SecurityQuestions SecurityQuestions { get; set; }
  6. }
  7.  
  8. public class UserLogin
  9. {
  10. public string LoginId { get; set; }
  11. public string Password { get; set; }
  12. }
@H_301_4@主Register.cshtml视图的标记并不完全在下面,但这是部分在下面使用的方式:

  1. @model Models.Account.AccountSetup
  2.  
  3. . . . <pretty markup> . . .
  4.  
  5. @using (Html.BeginForm("Register","Account",FormMethod.Post))
  6. {
  7. . . . <other fields and pretty markup> . . .
  8.  
  9. @Html.Partial("_LoginAccount",Model.UserLogin)
  10. @Html.Partial("_SecurityQuestions",Model.SecurityQuestions)
  11.  
  12. <input id="btnContinue" type="image" />
  13. }
@H_301_4@仅供参考,_LoginAccount的部分视图在下方,删除了多余的标记.

  1. @model Models.Account.UserLogin
  2.  
  3. <div>
  4. @Html.TextBoxFor(mod => mod.LoginId)
  5.  
  6. @Html.PasswordFor(mod => mod.Password)
  7. </div>
@H_301_4@问题出在注册表单上,AccountSetup属性为null,包含在partials中.但是,如果我将单个模型添加方法签名中,则会填充它们.我意识到这是因为当字段呈现时ID被更改,因此它们看起来像注册视图的_LoginId,因此它不会映射回AccountSetup模型.

@H_301_4@不为accountSetup.UserLogin或accountSetup.SecurityQuestions获取

  1. [HttpPost]
  2. public ActionResult Register(AccountSetup accountSetup)
  3. {
@H_301_4@获取userLogin和securityQuestions的值

  1. [HttpPost]
  2. public ActionResult Register(AccountSetup accountSetup,UserLogin userLogin,SecurityQuestions securityQuestions)
  3. {
@H_301_4@问题是如何将这些映射回到包含的Views(AccountSetup)模型的属性,而不必将部分模型添加方法签名只是为了获取值?在主视图中使用强类型部分视图这是一种不好的方法吗?

解决方法

这是因为您的部分视图是强类型的.删除Partials中的@model声明,然后像这样访问Model属性
  1. @Html.Partial("_LoginAccount")
@H_301_4@然后在你的部分

  1. <div>
  2. @Html.TextBoxFor(mod => mod.UserLogin.LoginId)
  3. @Html.PasswordFor(mod => mod.UserLogin.Password)
  4. </div>

猜你在找的asp.Net相关文章