我有一个视图需要传入和传出几个不同的对象和对象列表,为此我创建了一个viewmodel。我的viewmodel如下所示:
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 数据返回到控制器时为 null,而我并不确定如何使其按照我想要的方式工作。
以下是所请求的表格开头和第一行的生成 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以允许索引。