【问题标题】:DropdownListFor - Null Reference Exception on page modelDropdownListFor - 页面模型上的空引用异常
【发布时间】:2011-03-03 03:33:04
【问题描述】:

我正在尝试将我的一个模型保存到数据库中。给定模型:

public class Foo {
     public int Id { get; set; }
     public string Name { get; set; }
     public virtual Bar Something { get; set; }
}

public class Bar {
     public int Id { get; set; }
     public string Name { get; set; }
}

public class FooPageModel {
    public Foo F { get; set; }
    public List<SelectListItem> Bars { get; set; }
}

在我的控制器中,我有:

public ActionResult Add(){
     var bars = ... // get all bars from db context
     var barsList = new List<SelectListItem>();
     barsList.AddRange(bars.Select(b => new SelectListItem {
          Text = b.Name,
          Value = b.Name
     }));

     var model = new FooPageModel
     {
          Bars = barsList
     };
     return View("Add", model);
 }

现在是视图(强类型为 FooPageModel):

<%: Html.DropdownListFor(f => f.F.Bar, Model.Bars) %>

视图呈现良好,具有我期望的值,但是当我提交页面表单时,我得到一个 NullReferenceException(在控制器上的操作到达之前粘贴在上面的视图行上)。我想也许如果我将控制器代码修改为:

var model = new FooPageModel
{
     F = new Foo(),
     Bars = barsList
}

但是,这也失败了。我想我可以将 FooPageModel 重写为我想要的信息字符串列表,但是重复模型逻辑似乎是多余的;总的来说,我对 CTP 很陌生,所以也许它就是这样完成的?

我能够为 ComplexType(地址模型)编写类似的代码并且没有任何问题。如果堆栈跟踪有帮助,请告诉我,我会发布它。提前致谢。

【问题讨论】:

  • 已解决:我只放伪代码而不是实际代码是我的错。问题是在我的模型中,我有几个 int 和 float 对象。这些在数据库中创建为不可为空的类型。我将模型更改为使用 int?和浮动?一切似乎都很好。

标签: entity-framework-ctp5


【解决方案1】:

您没有显示返回 ActionResult 的代码,但您需要确保将模型传递给视图,如下所示:

public ActionResult Add() {
    ...

    return View(model);  // send the model to the view
}

【讨论】:

  • 对不起,我没有包括在控制器中返回模型(我只是编辑显示)。但显然这不是问题,因为我只在表单发布时得到空异常,而不是在页面加载时。
猜你喜欢
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 2013-11-30
  • 2018-06-07
  • 2011-05-16
相关资源
最近更新 更多