У меня есть представление, что - среди прочего - содержит список элементов. Я хочу повторно использовать этот список, поэтому я перенесу его в частичное представление. Мое представление содержит форму, а в сообщении я хочу включить некоторые значения в список. Поэтому я использую @Html.EditorFor(m => m.Something)
для генерации блоков ввода, которые получат уникальный идентификатор. Представление строго типизировано, чтобы использовать «MyModel» в качестве модели. В дальнейшем MVC-фреймворк обрабатывает все очень хорошо - объединяя значения обратно в объект MyModel, содержащий входные данные и некоторые поля, которые я использовал Html.HiddenFor
. Все хорошо.
Теперь я переместил это в частичное представление. Частичное представление работает только со списком и поэтому строго типизировано для списка моделей. Я включаю этот вид из моего основного вида и передаю в список, который я хочу, чтобы он отображался. Код таблицы в частичном представлении точно такой же, каким он был раньше, за исключением того, что он изменяется для получения значений из списка вместо MyModel. Все данные отображаются отлично, но есть проблема. Поле ввода больше не получает идентификатор. И поскольку они не получают идентификатор, их значение не включается в опубликованную форму - и, следовательно, они не отображаются в модели, которую я получаю в качестве входных данных для моего метода публикации. Я попытался включить частичное представление, используя @Html.Partial("_MyPartial", Model.Items)
и @{Html.RenderPartial("_MyPartial", Model.Items);}
Итак, вопрос в том; как я могу сделать эту работу с частичным представлением? Как я могу вернуть этот идентификатор?
Вот пример кода на случай, если что-то неясно:
MyModel.cs
----------
public class MyClass
{
public string Val1 { get; set; }
public string Val2 { get; set; }
}
public class MyModel
{
public List<MyClass> Items {get; set; }
}
MyView.cshtml:
--------------
@model MyModel
using (Html.BeginForm("SomeAction", "SomeController", FormMethod.Post))
{
@Html.Partial("_MyPartial", Model.Items)
}
_MyPartial.cshtml:
------------------
@model List<MyClass>
<table>
<tbody>
for (var i = 0; i< Model.Count; i++)
{
<tr>
<td>
@Model[i].Val1
@Html.HiddenFor(model => model[i].Val1)
</td>
<td>@Html.EditorFor(model => model[i].Val2)</td>
</tr>
}
</tbody>
</table>