DropdownListFor - 页面模型上的空引用异常

Posted

技术标签:

【中文标题】DropdownListFor - 页面模型上的空引用异常【英文标题】:DropdownListFor - Null Reference Exception on page model 【发布时间】: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?和浮动?一切似乎都很好。 【参考方案1】:

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

public ActionResult Add() 
    ...

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

【讨论】:

对不起,我没有包括在控制器中返回模型(我只是编辑显示)。但显然这不是问题,因为我只在表单发布时得到空异常,而不是在页面加载时。

以上是关于DropdownListFor - 页面模型上的空引用异常的主要内容,如果未能解决你的问题,请参考以下文章

片段中的 EditText 上的空指针异常 [重复]

锚元素上的空 href 属性在 HTML 中有效,但在 Twig 中无效

Html.DropDownListFor() 二级联动 ($.getJSON)

如何使绑定到 Nullable<int> 属性的 DropDownListFor 接受空值?

本地 xampp 服务器上的空会话

Kendo DropdownList 从模型中设置值