Относительно этого сообщения и этого другого сообщения .
Предположим, у меня есть следующее:
public class Foo
{
public string Value1 { get; set; }
public string Value2 { get; set; }
}
public class BarViewModel
{
public string Baz { get; set; }
public IList<Foo> Foos { get; set; }
}
И у меня есть вид, который получает BarViewModel
:
@model BarViewModel
@Html.EditorFor(model => model.Baz)
<table>
@for(int i = 0 ; i < Model.Foos.Count ; i ++)
{
string name1 = "Foos[" + i.ToString() + "].Value1";
string name2 = "Foos[" + i.ToString() + "].Value2";
<tr>
<td>
<input type="text" name="@name1" value="@Model.Foos[i].Value1" />
</td>
<td>
<input type="text" name="@name2" value="@Model.Foos[i].Value2" />
</td>
</tr>
}
</table>
И в моем контроллере у меня есть метод POST, который получает BarViewModel
.
Учитывая имена входных данных, сгенерированные для Value1 и Value2: "Foos[0].Value1"
и "Foos[1].Value1"
и т. Д., Коллекция в BarViewModel в методе POST автоматически заполняется ModelBinder. Потрясающе.
Проблема в том, что если я сделаю это так, на мой взгляд:
@for(int i = 0 ; i < Model.Foos.Count ; i ++)
{
<tr>
<td>
@Html.EditorFor(model => model.Foos[i].Value1);
</td>
<td>
@Html.EditorFor(model => model.Foos[i].Value2);
</td>
</tr>
}
Тогда имена, сгенерированные для ввода, похожи на "Foos__0__Value1"
, и нарушают привязку модели . Свойство Foos
моей BarViewModel в моем методе POST теперь null
Я что-то упустил?
Редактировать
Если я использую EditorFor
на самой коллекции:
@EditorFor(model => model.Foos)
Имена генерируются правильно. Но это вынуждает меня создать ViewModel в / Views / Share для обработки типа Foos
, который будет генерировать строку, которую я действительно не хочу делать ...
Редактировать 2
Я уточню свой вопрос здесь, я понимаю, что он немного расплывчатый.
Если я это сделаю:
@EditorFor(model => model.Foos)
Имена входных данных будут иметь форму "Foos[0].Value1"
, и привязка модели отлично работает на сообщениях.
Но если я сделаю:
@for(int i = 0 ; i < Model.Foos.Count ; i ++)
{
@EditorFor(model => Model.Foos[0].Value1)
}
Имена принимают форму "Foos__0__Value1"
, а привязка модели не работает . В моем методе сообщения model.Foos будет нулевым.
Есть ли причина, по которой второй синтаксис нарушает привязку модели?