我有 NameModel 和 RegisterModel 以及 SuperClass 类如下: -
案例 1: - 使用超类
public class SuperClass
{
public RegisterModel Register{ get; set; }
public NameModel NameInfo { get; set; }
}
public class NameModel
{
[Required]
public string FirstName { get; set; }
public string MiddleName { get; set; }
[Required]
public string LastName { get; set; }
}
public class RegisterModel
{
public NameModel NameInfo{ get; set; }
[Required]
public string UserName { get; set; }
[Required]
public string Password { get; set;}
}
MyNamePartial 强类型视图如下:-
@model MyNamespace.Models.NameModel
@{
Layout = null;
}
{
@Html.TextBoxFor(m=>m.FirstName,new { @id="firstName"} )
@Html.TextBoxFor(m=>m.MiddleName,new { @id="middleName"} )
@Html.TextBoxFor(m=>m.LastName,new { @id="lastName"} )
}
我的注册视图是注册模型的强类型,如下所示:-
@model MyNamespace.Models.SuperClass
@{
Layout = "~/Views/_Layout.cshtml";
}
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myForm" }))
{
<div id="form">
@Html.Partial("NameModel",Model.NameInfo)
@Html.TextBoxFor(m=>m.Register.UserName,new { @id="userName"})
@Html.TextBoxFor(m=>m.Register.Password,new { @id="password"})
<input type="submit" value="Register" id="btnRegister" />
</div>
}
上述方法给出了对象引用错误。
案例 2: - 使用 HTML.Action 并且没有 SuperClass 尝试使用 @Html.Action("MyNamePartialView") 而不是 @Html.Partial("NameModel",Model.NameInfo),然后我使用如下控制器操作方法
我的注册视图是注册模型的强类型,如下所示:-
@model MyNamespace.Models.RegisterModel
@{
Layout = "~/Views/_Layout.cshtml";
}
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myForm" }))
{
<div id="form">
@Html.Action("MyNamePartialView")
@Html.TextBoxFor(m=>m.UserName,new { @id="userName"})
@Html.TextBoxFor(m=>m.Password,new { @id="password"})
<input type="submit" value="Register" id="btnRegister" />
</div>
}
注册控制器:-
public ActionResult MyNamePartialView()
{
return PartialView("MyNamePartial", new NameModel());
}
[HttpPost]
[AllowAnonymous]
public ActionResult Register(RegisterrModel model)
{
@ViewBag.sideMenuHeader = "Create an Account";
if (ModelState.IsValid)
{
//Perform Something
return View();
}
return View();
}
上述情况不绑定表单上输入的值。它为 NameModel 设置 null。
我不想使用 EditorFor,因为我必须向助手提供 html 和自定义属性。部分视图的绑定失败。它在注册视图中给我对象引用错误。如上所述,我如何使用具有这种模型类层次结构的强类型局部视图?