【发布时间】:2011-01-16 21:51:39
【问题描述】:
我有一个看起来像这样的模型:
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是一个SelectList,而SelectList没有无参构造函数,所以无法完成绑定。
所以,我想我了解问题所在,但我真的可以为这种情况使用一个很好的解决方案,当你有带有外键的模型对象时,这似乎经常出现。
一些问题:
- 如何让
Colors在“编辑”视图中显示为菜单,但在“详细信息”视图中仅显示为简单的字符串值(例如“Green”)? - 如何在更新包含
SelectList的模型时防止出现“无参数构造函数”错误? - 如果我的模型/视图模型实际上包含一个外键
ColorId,而不是Colors,那么让详细信息视图显示当前颜色的名称和编辑视图显示包含在我的数据库的Color表中列出的所有颜色名称的菜单。如果有帮助,我将使用 LinqToSql (SqlMetal) 来生成我的模型类。
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-2 viewmodel scaffolding