我遇到以下错误消息:
Object reference not set to an instance of an object.
断线:
Line 16: </div>
Line 17: <div class="editor-field">
Line 18: @Html.DropDownList("KPI.CSF.FYID", Model.Financial_Years)
Line 19: @Html.ValidationMessageFor(model => model.KPI.CSF.FYID)
Line 20: </div>
这发生在我的 mvc 项目中的表单发布期间。
加载创建表单时,我正在传递以下视图模型:
public class KPICreateFormViewModel
{
//Properties
public KPI KPI { get; set; }
public SelectList Financial_Years { get; private set; }
FYRepository fyrepo = new FYRepository();
public KPICreateFormViewModel(KPI kpi)
{
KPI = kpi;
Financial_Years = new SelectList(fyrepo.GetFys(), "ID", "Financial_Year");
}
}
我使用财务年度作为下拉菜单,然后启动一些 ajax 以级联其他一些下拉菜单,这些下拉菜单将在我的帖子中填充 ID 号。
我不希望我的财务年度下拉列表在我的控制器的 http post 方法中发布任何内容。所以我想如果我只是传回以下内容,我会没事的:
[HttpPost]
public ActionResult Create(KPI kpi)
{
try
{
kpirepository.Add(kpi);
kpirepository.Save();
return RedirectToAction("Details", new { id = kpi.ID });
}
catch
{
return View();
}
}
我认为这一切都是因为我的视图基于视图模型而发生的,然后在发布后我没有将其退回?经过数小时弄乱级联代码以使其正常工作后,我的脑袋有点想尝试解决这个问题..帮助!
我认为显示财政年度下拉列表的相关部分:
@model ES_Business_Intelligence.ViewModels.Admin.KPICreateFormViewModel
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>KPI</legend>
<div class="editor-label">
@Html.LabelFor(model => model.KPI.CSF.FYID)
</div>
<div class="editor-field">
@Html.DropDownList("KPI.CSF.FYID", Model.Financial_Years)
@Html.ValidationMessageFor(model => model.KPI.CSF.FYID)
</div>