【发布时间】:2014-11-02 02:25:50
【问题描述】:
我有一个包含 ICollection 字段的视图模型,如下所示:
public class BusinessViewModel
{
...
public virtual ICollection<Subcategory> Subcategories { get; set; }
...
}
然后,在我的实际视图中,我有一个这样的代码段:
<div class="form-group">
@Html.LabelFor(model => model.Subcategories, "Subcategory", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
<span id="subcats">
</span>
</div>
</div>
之后,我在 JS 中有一个 AJAX 调用,它只是用复选框项填充我的 subcats span 字段,我的 AJAX 调用如下所示:
$("#CategoryID").change(function () {
$("#subcats").empty();
$.ajax({
type: 'POST',
url: '/Account/GetSubcategories',
dataType: 'json',
data: { id: $("#CategoryID").val() },
success: function (subcategories) {
$.each(subcategories, function (i, subcategory) {
$("#subcats").append('<input type="checkbox" name="' + subcategory.value + '" value="' + subcategory.id + '" />' + subcategory.value + '<br />');
});
},
error: function (ex) {
console.log('Failed to retrieve subcategories! ' + ex);
}
});
return false;
});
关键是,它在视图中一切正常,但是当我检查我希望的项目并按下按钮以提交表单时,我收到一条错误消息,说发生了 NullReferenceException,当我到达我的控制器中以下代码的 foreach 语句:
public async Task<ActionResult> RegisterBusiness(BusinessViewModel model)
{
if (ModelState.IsValid)
{
...
foreach (var subcategory in model.Subcategories)
{
db.Entry(subcategory).State = EntityState.Unchanged;
user.Subcategories.Add(subcategory);
}
...
}
...
}
我想这是因为我没有将选定的复选框分配给我的模型。有人可以告诉我如何在我当前的设置中做到这一点吗?一个实现这一点的代码示例将受到高度欢迎。
编辑: 这就是我的子类别模型的样子,至少是其中的重要部分:
public class Subcategory
{
public int SubcategoryID { get; set; }
public string SubcategoryName { get; set; }
}
而且根据下面的答案,我的观点现在包括:
<div class="form-group">
@Html.LabelFor(model => model.Subcategories, "Subcategory", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.ListBoxFor(model => model.SelectedSubcategories, Model.SubcategoryList)
</div>
</div>
我在 ListBoxFor 部分再次收到 NullReference 错误。
【问题讨论】:
标签: c# javascript ajax asp.net-mvc checkbox