Я имею NameModel и RegisterModel и суперкласса классов, как показано ниже: -с использованием сильно типизированных частичный вид внутри другого сильно типизированных
Случай 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 и нет суперкласса попытался с помощью @ Html.Action ("MyNamePartialView") вместо @ Html.Partial ("NameModel", Model.NameInfo), Затем я использую контроллер Action метод, как показано ниже
Моей Регистрация Просмотр сильно типизированный регистр модели следующим образом: -
@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();
}
Вышеприведенный случай не связывает значения, введенные в форме. он устанавливает null для NameModel.
Я не хочу использовать EditorFor, поскольку я должен предоставлять html и пользовательские атрибуты для helpers. Связывание с частичным представлением fail.it дает мне ошибку ссылки на объект в представлении регистрации. Как я могу использовать такие строго типизированные частичные представления с такой такой иерархией классов модели, как описано выше?
2 пути. 1) создать «суперкласс», содержащий обе модели. 2) используйте метод частичного с дочерним действием. Действие child создаст экземпляр и передаст модель просмотра в частичное. –
Спасибо @DaveA. Не могли бы вы объяснить варианты? Я не понял это точно. – user2232861
вы можете создать класс, который содержит как NameModel, так и RegisterModel, и передать это вашему представлению. Затем вы можете передать @ Model.NameModel своим частичным при использовании RegisterModel для привязки своих элементов управления. –