Таким образом, у меня есть представление, которое требует нескольких разных объектов и списков объектов, которые необходимо передать и удалить, для которых я создал viewmodel. Мой ViewModel выглядит следующим образомМодель MVC 4 возвращается назад
public class EditUserViewModel
{
public ManageUsersViewModel ManageUsersViewModel { get; set; }
public IEnumerable<StateModel> StateModel { get; set; }
}
Часть, у меня возникают проблемы с является StateModel, который выглядит следующим образом
public class StateModel
{
public bool IsChecked { get; set; }
public States States { get; set; }
public UsersInStates UsersInStates { get; set; }
}
и содержит этот
[Table("States")]
public class States
{
[Key]
public int StateId { get; set; }
public string State { get; set; }
}
[Table("UsersInStates")]
public class UsersInStates
{
[Key, Column(Order = 1)]
public int UserId { get; set; }
[Key, Column(Order = 2)]
public int StateId { get; set; }
public string LicenseNumber { get; set; }
}
На мой взгляд, я более или менее пытаясь перебрать состояния и ввести пользовательский ввод для UsersInStates. Вот как я пытаюсь это сделать, но вся моя StateModel возвращается null. Переход к представлению StateModel.States имеет данные, а UsersInStates - нет. Это то, на что похоже, на мой взгляд.
@foreach (var state in Model.StateModel)
{
@Html.HiddenFor(m => state)
<tr>
<td>
@Html.CheckBoxFor(m => state.IsChecked)
</td>
<td>
@Html.Label(state.States.State)
</td>
<td>
@Html.EditorFor(m => state.UsersInStates.LicenseNumber)
</td>
</tr>
}
Любые советы будут высоко оценены. Все отображает как следует, и часть ManageUsersViewModel работает нормально, так как данные StateModel, возвращающиеся к контроллеру, равны нулю, и я не совсем уверен, как сделать эту работу так, как мне хотелось бы.
Это то, что сгенерированный HTML выглядит для начала таблицы и первой строки в соответствии с просьбой
<table style="margin-left:auto; margin-right:auto; text-align:center">
<input id="state" name="state" type="hidden" value="WebSiteNew.Models.StateModel" /> <tr>
<td>
<input data-val="true" data-val-required="The IsChecked field is required." id="state_IsChecked" name="state.IsChecked" type="checkbox" value="true" /> <input name="state.IsChecked" type="hidden" value="false" />
</td>
<td>
<label for="Alabama">Alabama</label>
</td>
<td>
<input class="text-box single-line" id="state_UsersInStates_LicenseNumber" name="state.UsersInStates.LicenseNumber" type="text" value="" />
</td>
</tr>
Ответ:
Хорошо, таким образом, чтобы решить эту проблему я использовал для цикла, как объясняется в обеих ссылках, перечисленных в ответе ниже
@for (int i = 0; i < Model.StateModel.Count(); i++)
{
<tr>
<td>
@Html.HiddenFor(m => m.StateModel[i].States.StateId)
@Html.HiddenFor(m => m.StateModel[i].States.State)
@Html.CheckBoxFor(m => m.StateModel[i].IsChecked)
</td>
<td>
@Html.Label(Model.StateModel[i].States.State)
</td>
<td>
@Html.EditorFor(m => m.StateModel[i].UsersInStates.LicenseNumber)
</td>
</tr>
}
также примечание к любому, глядя на это, я должен был изменить IEnumer в моем EditUsersViewModel для IList, чтобы можно было индексировать.
Можете ли вы показать, как выглядит сгенерированный HTML? – CorrugatedAir
Да, я обновил свой пост. – aw04
. Добавить метод контроллера для обратной передачи. –