У меня есть ViewModel, который имеет сложный объект как один из его членов. Комплексный объект имеет 4 свойства (все строки). Я пытаюсь создать многоразовый частичный вид, где я могу передать сложный объект и создать его html с помощью html-помощников для его свойств. Это все отлично работает. Однако, когда я отправляю форму, привязка модели не отображает значения обратно в элемент ViewModel, поэтому я ничего не могу получить на стороне сервера. Как я могу прочитать значения, которые пользователь вводит в html-помощники для сложного объекта.
ViewModel
public class MyViewModel
{
public string SomeProperty { get; set; }
public MyComplexModel ComplexModel { get; set; }
}
MyComplexModel
public class MyComplexModel
{
public int id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
....
}
контроллер
public class MyController : Controller
{
public ActionResult Index()
{
MyViewModel model = new MyViewModel();
model.ComplexModel = new MyComplexModel();
model.ComplexModel.id = 15;
return View(model);
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
// model here never has my nested model populated in the partial view
return View(model);
}
}
Вид
@using(Html.BeginForm("Index", "MyController", FormMethod.Post))
{
....
@Html.Partial("MyPartialView", Model.ComplexModel)
}
Частичный вид
@model my.path.to.namespace.MyComplexModel
@Html.TextBoxFor(m => m.Name)
...
как я могу привязать эти данные к отправке формы, чтобы родительская модель содержала данные, введенные в веб-форме, из частичного представления?
спасибо
EDIT: Я понял, что мне нужно добавить "ComplexModel". ко всем моим управляющим именам в частичном представлении (текстовые поля), чтобы он сопоставлялся с вложенным объектом, но я не могу передать тип ViewModel в частичное представление, чтобы получить дополнительный слой, потому что он должен быть общим для принятия нескольких ViewModel типы. Я мог бы просто переписать атрибут name с помощью javascript, но это кажется чрезмерным гетто для меня. Как еще я могу это сделать?
EDIT 2: я могу статически установить атрибут name с новым { Name= "ComplexModel.Name" }, поэтому я думаю, что я в бизнесе, если у кого-то нет лучшего метода?