所以我有一个视图,它需要几个不同的对象和对象列表来传入和传出,我已经为其创建了一个视图模型。我的视图模型看起来像这样
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 都返回为空。进入视图 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 循环,如下面答案中列出的两个参考文献中所述
@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>
}
还请注意,我必须将 EditUsersViewModel 中的 IEnumerable 更改为 IList 以允许索引。