我正在尝试将我的一个模型保存到数据库中。鉴于模型:
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);
}
现在为View(强类型为FooPageModel):
<%: Html.DropdownListFor(f => f.F.Bar, Model.Bars) %>
视图呈现正常,具有我期望的值,但是当我提交页面表单时,我得到NullReferenceException(在到达控制器上的操作之前粘贴在上面的视图行上)。我想如果我将控制器代码修改为:
var model = new FooPageModel
{
F = new Foo(),
Bars = barsList
}
然而,这也失败了。我想我可以重写FooPageModel只是我想要的信息的字符串列表,但复制模型逻辑似乎是多余的;我对CTP一般都很陌生,所以也许这就是它的完成方式?
我能够为ComplexType(地址模型)编写类似的代码,并且没有任何问题。如果堆栈跟踪有用,请告诉我,我会发布它。提前谢谢。
答案 0 :(得分:0)
您没有显示返回ActionResult
的代码,但是您需要确保将模型传递给视图,如下所示:
public ActionResult Add() {
...
return View(model); // send the model to the view
}