【发布时间】:2012-10-10 19:14:08
【问题描述】:
为了体验 Entity Framework 的新功能,我创建了一个新的 MVC 4 互联网应用程序。
我将其连接到现有数据库并使用 dbContext 生成器生成模型类。
通过运行应用程序,我在编辑表单时遇到了一些验证错误。作为 DateTime 字段的示例,如果将日期插入为“12/10/2012”而不是 2012-10-12(如在 SQ Server 表示法中),系统会抱怨。
我试图在项目中找到验证码,但在生成的代码中的任何地方都找不到。
我的模型类之一如下:
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; }
}
如果使用数据库优先方法,我如何自定义验证错误?
如果我用我的验证属性装饰模型,那么一旦再次生成模型类,它们就会被删除。
此外,在强制使用现有数据库的“现实世界”项目中,开发模型类的最佳方法是什么?
通过添加同名的部分类来扩展自动生成的类?
编辑(视图的引入部分):
@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>
}
【问题讨论】:
-
您的视图是什么样的?以 MM/DD/YYYY 格式输入日期应该没有问题,因为在将其发送到 SQL Server 之前,它会在 .net 中转换为 DateTime。因此,在您看来,您一定是在做一些有点不靠谱的事情。除非您尝试以 DD/MM/YYYY 格式输入日期,在这种情况下,这是一个完全不同的全球化问题。但是,您给出的示例不应该给出任何验证错误,因为无论哪种方式它都是有效的(尽管如果使用 DD/MM/YYYY 显然可能不会给出您想要的结果)
-
您可以使用 Fluent API 添加验证约束:msdn.microsoft.com/en-us/data/gg193959.aspx
-
@millimoose - 这些约束仅适用于数据库,不适用于 MVC 验证。
-
您使用什么日期格式?您确定 12/10/2012 会产生错误吗?因为无论哪种方式它都应该通过验证。现在,像 2012 年 10 月 15 日这样的事情就不同了。
-
如果你想要答案,Luca.. 我建议回答人们问你的问题,否则有什么意义?
标签: c# asp.net-mvc visual-studio-2010 entity-framework