0

我遇到以下错误消息:

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

2 回答 2

1

在从 webdeveloper 确认问题后,我进行了更多挖掘,发现当从表单提交返回数据时,我可以告诉我的视图模型的某些元素不绑定。我将以下代码添加到我的视图模型中:

[Bind(Exclude = "Financial_Years")]
    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");

        }

    }

魔术都在第一行:

[Bind(Exclude = "Financial_Years")]
于 2012-09-17T06:23:52.720 回答
0

您是绝对正确的,您使用强类型视图并在发布null视图路径后,这就是为什么当您尝试访问属性 ( model => model.KPI.CSF.FYID) 时会引发异常。作为解决方案,您可以添加 if 块并忽略 html 标记,如果模型是null.

于 2012-09-16T22:19:08.510 回答