我在部分视图中使用dropdownlist获取了一个null引用错误。我似乎无法找到我遗漏或做错的东西来获得一个空的对象引用。 的 ModelCode:
CommonHerpNames.cs
public class CommonHerpNames
{
[Key]
public int CommonHerpId { get; set; }
public string HerpName { get; set; }
}
NewReptileViewModel.cs
public class NewReptileViewModel
{
public IEnumerable<CommonHerpNames> CommonAnimalNames { get; set; }
public ReptileModel ReptileModel { get; set; }
}
控制器代码:
public ActionResult _AddReptile()
{
var commonAnimalTypes = _context.CommonHerps.ToList();
var viewModel = new NewReptileViewModel
{
CommonAnimalNames = commonAnimalTypes
};
return PartialView("_AddReptile", viewModel);
}
部分ViewCode:
<div class="form-group">
@Html.DropDownListFor(model => model.ReptileModel.CommonHerpTypeId, new SelectList(Model.CommonAnimalNames, "CommonHerpId", "HerpName"), "Select Animal")
</div>
主要视图代码:
<div>
@Html.Partial("_addReptiles")
</div>
为了记录,我知道我的CommonHerps背景很好,因为我最近完成了添加迁移和更新数据库-Verbose 。
答案 0 :(得分:1)
使用Html.Partial()
不会调用您的服务器方法。它只渲染部分视图(将主视图中的模型传递给部分视图)并抛出错误,因为CommonAnimalNames
为null
而您无法为{{SelectList
初始化null
1}}。
将主视图中的代码更改为
@Html.Action("_AddReptile") // add controller name as 2nd parameter if necessary
或
@{ Html.RenderAction("_AddReptile"); }
会调用您的_AddReptile()
方法,该方法会初始化您的视图模型并设置CommonAnimalNames
的值。
您可能还需要考虑使用_AddReptile()
属性标记[ChildActionOnly]
,以防止浏览器调用它。