Фил Хаак некоторое время назад написал статью , объясняющую, как связывать коллекции (ICollection
) для просмотра моделей. В нем подробно рассказывается о создании шаблона редактора, что вы, безусловно, могли бы сделать.
По сути, вам нужно добавить префикс имен атрибутов HTML-элементов к индексу.
<input type="text" name="[0].PropertyName" value="Curious George" />
<input type="text" name="[0].PropertyValue" value="H.A. Rey" />
<input type="text" name="[1].PropertyName" value="Ender's Game" />
<input type="text" name="[1].PropertyValue" value="Orson Scott Card" />
Тогда ваш контроллер может связать коллекцию FieldModel
[HttpPost]
public ActionResult GetResponse(List<FieldModel> fieldModelList)
{
return GetResponse(fieldModelList);
}
Я не уверен на 100%, что следующие атрибуты правильно назвали бы атрибуты (я бы порекомендовал использовать шаблон редактора), но вы можете легко использовать аргумент htmlAttributes
и дать ему имя, используя индекс.
@for(int i = 0;i < Model.Count;i++)
{
<tr>
<td>
@Html.DisplayFor(m => m[i].PropertyName)
</td>
<td>
@Html.TextBoxFor(m => m[i].PropertyValue)
</td>
</tr>
}
Шаблон редактора
Если вы хотите пойти дальше, добавив шаблон редактора, добавьте частичное представление с именем FieldModel.ascx
к /Views/Shared
, которое строго типизировано к FieldModel
@model Regions.SOA.UI.CopyBookSchemaCreator.Models.FieldModel
@Html.TextBoxFor(m => m.PropertyName) @* This might be a label? *@
@Html.TextBoxFor(m => m.PropertyValue)
И тогда часть вашего представления, отвечающая за рендеринг коллекции, будет выглядеть так:
@for (int i = 0; i < Model.Count; i++) {
@Html.EditorFor(m => m[i]);
}