У меня есть следующий ViewModel, который я заполняю некоторыми предопределенными данными. Одной из этих предопределенных данных является список параметров ViewPod Parameter, которые первоначально отображают n номеров ApplicationParameters.Добавление динамически добавленных элементов управления в ViewModel
То, что я хотел достичь, - это позволить пользователю добавлять дополнительное число ViewModels ApplicationParameters на кнопку, которую я достиг, вызвав PartialView с кодом ApplicationParameter. Поскольку ожидаемые элементы управления автоматически добавляются, но они не распознаются в ViewModel, поскольку у них нет правильного наименования (поскольку они вложены).
Что делать, чтобы сделать динамически добавленные элементы управления видимыми для ViewModel, возвращаемых в POST.
ViewModels
public class ApplicationVM
{
public int idApplication { get; set; }
public int idCompany { get; set; }
public string Company { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Link { get; set; }
public string Photo { get; set; }
public List<ApplicationParameterVM> ApplicationParameters { get; set; }
}
public class ApplicationParameterVM
{
public string Name { get; set; }
public bool Keep { get; set; }
}
вид Действие (фрагмент кода)
<tbody id="editorRows">
@for (int i = 0; i < Model.ApplicationParameters.Count(); i++)
{
<tr>
<td>
@Html.TextBoxFor(m => Model.ApplicationParameters[i].Name, new { @class = "form-control" })
@Html.CheckBoxFor(m => Model.ApplicationParameters[i].Keep)
</td>
</tr>
}
</tbody>
вид Действие для добавления ApplicationParameterVM
@model AccessMarketmind.Areas.Administration.ViewModels.ApplicationParameterVM
@{
Layout = null;
}
<tr class="application-parameters">
<td>
@Html.TextBoxFor(m => Model.Name, new { @class = "form-control" })
@Html.CheckBoxFor(m => Model.Keep)
</td>
</tr>
Я знаю, что это выглядит тривиально и может быть легко сделано с помощью Javascript, но дело в том, что у меня есть более сложные ViewModels (читайте: сильно вложенные), в которых Javascript не является вариантом.
Я не понимаю, почему вам все еще нужно «Вид действия для добавления ApplicationParameterVM». – Sravan
@Sravan Возможно, я был недостаточно ясен, действие используется для создания ApplicationVM. Поскольку ApplicationParameters являются частью ViewModel, я нуждаюсь в них в своих действиях. Короче говоря, я пропустил ненужный код. –
Вам необходимо использовать вспомогательный помощник [BeginCollectionItem] (https://github.com/danludwig/BeginCollectionItem) или для поддержки с чистой стороны на стороне клиента [см. Этот ответ] (http://stackoverflow.com/questions/29837547/ set-class-validation-for-dynamic-textbox-in-a-table/29838689 # 29838689) –