Если у вас есть несколько полей с одним и тем же атрибутом name
, они вернутся в ваш FormCollection
в виде массива. Таким образом, после публикации мнение, как это:
<form action="/Home/MyAction">
<textarea id="row_one_description" name="description">
First row's description
</textarea>
<textarea id="row_two_description" name="description">
Second row's description
</textarea>
<input type="submit" value="Submit" />
</form>
Вы можете сделать что-то подобное в своем действии
[HttpPost]
public ActionResult MyAction(FormCollection collection)
{
var descriptionArray = collection["description"];
string firstRowDescription = descriptionArray[0];
string secondRowDescription = descriptionArray[1];
}
Я должен отметить, что это не рекомендуемый способ работы с опубликованными данными. Вместо этого вы должны строить свое представление, используя данные из модели представления и используя строго типизированные html-помощники для отображения ваших элементов управления. Таким образом, когда вы публикуете, ваше действие может принять ViewModel в качестве параметра. Его свойства будут автоматически связаны, и у вас будет хороший объект для игры.
[HttpPost]
public ActionResult MyAction(MyViewModel viewModel)
{
foreach (var row in viewModel.Rows)
{
string description = row.Description;
}
}
EDIT
Я все еще много думаю о вашей ViewModel, но, возможно, попробуйте это:
<table id="tblTenantSites">
<tr>
<th>@Html.LabelFor(model => model.Site.Title)</th>
<th>@Html.LabelFor(model => model.Site.Description)</th>
</tr>
@for (var i = i < Model.Tenants.Sites.Count(); i++) {
<tr>
@Html.HiddenFor(model => model.Tenants.Sites[i].SiteId)
<td>
@Html.EditorFor(model => model.Tenants.Sites[i].Title)
</td>
<td>
@Html.TextAreaFor(model => model.Tenants.Sites[i].Description, new { @width="400" } )
</td>
</tr>
}
</table>