我对ASP.NET MVC(以及一般的ASP.NET)都很陌生,并且会对这项技术有所了解,所以很抱歉我可以提出一些微不足道的问题。我已经安装了ASP.NET MVC 3 RC1,我正在尝试执行以下操作。
让我们考虑一下,我在VS2010中使用“LINQ to SQL Classes”模板从表中完全自动生成了一个模型。该模板生成3个文件(分别为两个.cs文件和一个.layout文件),生成的部分类应该用作MVC模型。我们还要考虑,映射到模型中的单个DB列可能如下所示:
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Name", DbType = "VarChar(128)")]
public string Name {
get {
return this._Name;
}
set {
if ( (this._Name != value) ) {
// ... generated stuff goes here
}
}
}
ASP.NET MVC引擎还提供了一种漂亮的声明方式来指定一些额外的东西,比如RequiredAttribute
,DisplayNameAttribute
和其他不错的属性。但由于映射模型是一个纯粹的自动生成模型,我意识到我不应该手动更改模型,并指定如下字段:
[Required]
[DisplayName("Project name")]
[StringLength(128)]
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Name", DbType = "VarChar(128)")]
public string Name {
...
尽管这种方法运行良好......直到我在DBML设计器中更改模型,自动删除ASP.NET MVC属性。那么,如何安全地为DBML模型及其字段指定ASP.NET MVC属性?
提前致谢,圣诞快乐。
更新#1:
在期待回复时,我发现了这样的东西:
答案 0 :(得分:1)
更正确的方法是制作相应的DTO(ViewModel或任何你称之为),并使用AutoMapper等工具将这些DTO映射到数据模型对象(将胖数据模型对象转换为清洁对象,反之亦然)。
有一些工具可以为您完成这项任务(制作DTO)并生成这些DTO。
看看VS画廊,您可能会找到很多选择。
也许找到一个很好的样本,如MicrosoftNLayerApp,采用所有这些技术将指导您完成整个过程。
最后,您的答案是使用DisplayName属性注释DTO类属性。
答案 1 :(得分:0)
由于我不想创建任何帮助程序类,我发现这篇文章最符合我的要求。但是,这种方法由于某种原因不起作用,但我仍然认为这是因为我缺乏ASP.NET MVC经验(参见Step 4: Creating a Custom [Email] Validation Attribute
):
http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx