【发布时间】: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?和浮动?一切似乎都很好。