Fra*_*sco 2 c# asp.net-mvc entity-framework visual-studio-2010
为了体验Entity Framework的新功能,我创建了一个新的MVC 4 Internet应用程序.
我将它连接到现有数据库并使用dbContext生成器生成Model类.
通过运行应用程序,我在编辑表单时遇到了一些验证错误.作为DateTime字段的示例,如果日期插入为"12/10/2012"而不是2012-10-12(如在SQ服务器表示法中),则系统会抱怨.
我试图在项目中找到验证代码,但我无法在生成的代码中找到它.
我的一个模型类如下:
public partial class Artist
{
public Artist()
{
}
public int Id { get; set; }
public string Name { get; set; }
public Nullable<System.DateTime> DateOfBirth { get; set; }
public virtual Countries Countries { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果使用数据库第一种方法,如何自定义验证错误?
如果我使用我的验证属性来装饰模型,那么一旦再次生成模型类,它们就会被删除.
此外,在一个"现实世界"项目中,必须使用现有数据库,那么开发模型类的最佳方法是什么?
通过添加具有相同名称的部分类来扩展自动生成的类?
编辑(介绍部分视图):
@using (Html.BeginForm()) {
@Html.ValidationSummary(false)
<fieldset>
<legend>Movie</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.DateOfBirth)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.DateOfBirth)
@Html.ValidationMessageFor(model => model.DateOfBirth)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
Run Code Online (Sandbox Code Playgroud)
好吧,你总是可以使用元数据类
public partial class ArtistMetaData
{
[Required]
[StringLength(20)]
public string Name;//it can be a field instead of a property, must just have the same name and type than in your Model class
}
Run Code Online (Sandbox Code Playgroud)
和部分班级
[MetadataType(typeof(ArtistMetaData)]
public partial class Artist {
}
Run Code Online (Sandbox Code Playgroud)
或者(我的首选解决方案)您可以使用外部验证库,例如优秀的FluentValidation
默认情况下,您有一个"基本"验证(可以在global.asax中删除),检查:非空元素值...不是空(如默认的必需属性),并且值是正确的类型.
| 归档时间: |
|
| 查看次数: |
2858 次 |
| 最近记录: |