在用户创建视图中,我有以下内容显示用户可以关联的区域复选框列表。 (点击所有适用的东西)
<div class="form-group">
<label class="col-md-2 control-label">
Select User Region(s)
</label>
<span class=" col-md-10">
@foreach (var item in Model.RegionsList)
{
<div>
<input type="checkbox" name="selectedRegions" value="@item.Value" checked="@item.Selected" class="checkbox-inline" />
@Html.Label(item.Text, new { @class = "control-label" })
</div>
}
</span>
</div>
显示得很好。但是,在我选中一两个框后,然后点击“创建&#39;按钮,浏览器回复:
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error: (line 38)
Line 36: </label>
Line 37: <span class=" col-md-10">
Line 38: @foreach (var item in Model.RegionsList)
Line 39: {
Line 40: <div>
以下是我设置该视图的方式:
public async Task<ActionResult> Create()
{
var context = new ApplicationDbContext();
var viewModel = new RegisterUserViewModel();
viewModel.SelectedRole = "User";
viewModel.RolesList = context.Roles.ToList().Select(x => new SelectListItem()
{
Selected = false,
Text = x.Name,
Value = x.Name
});
viewModel.RegionsList = context.Regions.ToList().Select(x => new SelectListItem()
{
Text = x.Name,
Value = x.ID.ToString(),
Selected = false
});
return View(viewModel);
}
Ant这是回发处理程序的签名。
[HttpPost]
public async Task<ActionResult> Create([Bind(Include = "Email,Id,SelectedRole")] RegisterUserViewModel registerUser, params string[] selectedRegions)
{
我没有得到它,页面只是通过该代码传递得很好。为什么它在回发时失败了?就此而言,为什么它会再次通过cshtml?
答案 0 :(得分:1)
您尚未显示完整的帖子方法代码,但我假设您返回错误发生时的视图。由于您未回发RegionsList
的任何属性,registerUser.RegionsList
的值将为null,因此当您返回视图并再次使用@foreach (var item in Model.RegionsList) {..
时,将抛出异常。在返回视图之前,您需要重新分配RegionsList
的值。
注意SelectListItem
的使用在这里并不合适,您应该考虑使用视图模型来表示角色和区域,以便在返回视图时保留选定的值