我有一个看起来像这样的模型:
public class SampleModel
{
public static SampleModel Create()
{
return new SampleModel
{
Boolean = true,
// set several more properties...
Colors = new SelectList(new[] { "Red", "Green", "Blue" }, "Green")
};
}
public bool Boolean { get; set; }
// define several more properties...
public SelectList Colors { get; set; }
}
我让 ASP.NET MVC 自动构建Html.DisplayForModel()
用于我的详细信息视图和Html.EditorForModel()
编辑视图的属性。
结果:
编辑视图效果很好。
Colors
显示为包含三个项目(红色、绿色和蓝色)的菜单,默认选择绿色。但是,对于详细信息视图,我得到“False True False”,这显然是
IsSelected
菜单中每个项目的值的列表。那绝对不是我想要的。我希望它只显示“绿色”。另一个问题是,如果我尝试
UpdateModel(sampleModel)
在控制器中执行此操作,则会收到错误消息“没有为此对象定义无参数构造函数”。这大概是因为Colors
是 aSelectList
,并且 没有无参构造函数SelectList
,所以无法完成绑定。
所以,我想我理解问题所在,但我真的可以为这种情况使用一个很好的解决方案,当你有带有外键的模型对象时,这似乎出现了很多。
一些问题:
- 如何
Colors
在“编辑”视图中显示为菜单,但在“详细信息”视图中仅显示为简单的字符串值(例如,“Green”)? - 更新包含 的模型时,如何防止“无参数构造函数”错误
SelectList
? - 如果我的 Model/ViewModel 实际上包含一个外键,
ColorId
而不是Colors
,那么让 Details 视图显示当前颜色的名称以及让 Edit 视图显示包含Color
我的数据库表。如果有帮助,我将使用 LinqToSql (SqlMetal) 来生成我的模型类。