Ваш взгляд немного беспорядок.Вы используете шаблоны редактора вместе с частями для первого ребенка.Не очень понятно, какие поля включены в форму.Я бы порекомендовал вам использовать только шаблоны редактора:
Модель:
public class ComplexParent
{
public SimpleChild First { get; set; }
public SimpleChild Second { get; set; }
}
public class SimpleChild
{
public int Id { get; set; }
public string ChildName { get; set; }
public string ChildDescription { get; set; }
}
Контроллер:
[HandleError]
public class HomeController : Controller
{
public ActionResult Testify(int id)
{
var par = new ComplexParent();
par.First = new SimpleChild() { Id = id };
par.Second = new SimpleChild()
{
Id = id + 1,
ChildName = "Bob",
ChildDescription = "Second"
};
return View(par);
}
[HttpPost]
public ActionResult Testify(ComplexParent pComplexParent)
{
return View(pComplexParent);
}
}
Вид:
<% using (Html.BeginForm()) { %>
<%: Html.EditorFor(x => x.First) %>
<%: Html.EditorFor(x => x.Second) %>
<input type="submit" value="Watch me :-)" />
<% } %>
Шаблон редакторадля SimpleChild (~/Views/Home/EditorTemplates/SimpleChild.ascx
):
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SomeNs.Models.SimpleChild>" %>
<%: Html.HiddenFor(x => x.Id) %>
<%: Html.EditorFor(x => x.ChildName) %>
<%: Html.EditorFor(x => x.ChildDescription) %>
Теперь, если вы хотите иметь разные шаблоны редактора для двух дочерних свойств, вы можете указать имя шаблона редактора при его включении:
<%: Html.EditorFor(x => x.First, "FirstChildEditor") %>
, что соответствует ~/Views/Home/EditorTemplates/FirstChildEditor.ascx
или используйте атрибут [UIHint]
в вашей модели:
public class ComplexParent
{
[UIHint("FirstChildEditor")]
public SimpleChild First { get; set; }
public SimpleChild Second { get; set; }
}
Моя рекомендация: , а не , чтобы использовать Html.RenderPartial
длягенерирование полей ввода, потому что их имена будут жестко закодированы и не будут привязаны должным образом в зависимости от иерархии объектов.