Я создал контрольный контроллер и посмотрел на тестовое сложное связывание, но я не могу заставить его работать.Связывание модели со сложным типом
Вот мой ViewModel:
public class TestViewModel
{
public SubTest MainTest { get; set; }
public List<SubTest> SubTestList { get; set; }
}
public class SubTest
{
public string Name { get; set; }
public int Id { get; set; }
}
Вот мой Вид:
@model TestViewModel
@{
using (Html.BeginForm())
{
<h2>Main</h2>
<p>
@Html.DisplayTextFor(m => m.MainTest.Id)
=>
@Html.DisplayTextFor(m => m.MainTest.Name)
</p>
<h2>Subs</h2>
foreach (var sub in Model.SubTestList)
{
<p>
@Html.DisplayTextFor(m => sub.Id)
=>
@Html.DisplayTextFor(m => sub.Name)
</p>
}
<button type="submit">Submit</button>
}
}
А вот мой контроллер:
public ActionResult Test()
{
TestViewModel tvm = new TestViewModel();
tvm.MainTest = new SubTest() { Id = 0, Name = "Main Test" };
tvm.SubTestList = new List<SubTest>()
{
new SubTest() { Id = 1, Name = "Sub Test 1" } ,
new SubTest() { Id = 2, Name = "Sub Test 2" } ,
new SubTest() { Id = 3, Name = "Sub Test 3" } ,
new SubTest() { Id = 4, Name = "Sub Test 4" } ,
};
return View(tvm);
}
[HttpPost]
public ActionResult Test(TestViewModel tvm)
{
return View(tvm);
}
Когда я загрузить страницу, все отображается правильно , но если я устанавливаю точку останова в методе POST, я вижу, что значения параметра равны нулю.
Что я делаю неправильно?
Это правильно, я внес изменения, и он работает, спасибо большое!. Можете ли вы объяснить мне, почему foreach не работает в этом случае? – Shimrod
Цикл foreach будет генерировать повторяющиеся атрибуты 'name', которые не имеют отношения к вашим свойствам модели (например,' name = "sub.Id" ') и без индексаторов, необходимых для привязки к коллекции (он также генерирует дубликат' id 'атрибуты, которые являются недопустимыми html). Предложите вам проверить html ваш генератор в обоих случаях, чтобы увидеть разницу (он должен быть 'name =" SubTestList [0] .Id "', 'name =" SubTestList [1] .Id "и т. Д.). –