从一组复选框中查看MVC中的回发问题

时间:2014-09-30 19:50:08

标签: asp.net-mvc

在用户创建视图中,我有以下内容显示用户可以关联的区域复选框列表。 (点击所有适用的东西)

<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?

1 个答案:

答案 0 :(得分:1)

您尚未显示完整的帖子方法代码,但我假设您返回错误发生时的视图。由于您未回发RegionsList的任何属性,registerUser.RegionsList的值将为null,因此当您返回视图并再次使用@foreach (var item in Model.RegionsList) {..时,将抛出异常。在返回视图之前,您需要重新分配RegionsList的值。

注意SelectListItem的使用在这里并不合适,您应该考虑使用视图模型来表示角色和区域,以便在返回视图时保留选定的值