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 - 页面模型上的空引用异常的主要内容,如果未能解决你的问题,请参考以下文章
锚元素上的空 href 属性在 HTML 中有效,但在 Twig 中无效
Html.DropDownListFor() 二级联动 ($.getJSON)