首页 新闻 会员 周边 捐助

我是用ADO.NET实体模型做MVC3的系统,但是我不知道如何做验证因为模型类是自动生成的?

0
悬赏园豆:50 [已解决问题] 解决于 2013-07-28 10:24

我是用ADO.NET实体模型做的系统,用了这个model是自动生成的

但是我不知道如何做验证因为模型类是自动生成的?

之前是自己建立model然后写一些注解自动验证

现在用这个不知道该怎么设置验证表单系统?

哪位前辈可以指点一二迷茫

不爱吃鱼的猫的主页 不爱吃鱼的猫 | 初学一级 | 园豆:89
提问于:2013-07-17 21:03
< >
分享
最佳答案
0

我的是MVC4的,应该差不多,实体类代码和验证都放在tt模版文件里,model.tt

你先找到可以自动生成命名空间的方法,导入MVC验证的命名空间,就是下面的

using System.ComponentModel.DataAnnotations;

foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))
{
fileManager.StartNewFile(entity.Name + ".cs");
BeginNamespace(code);
#>
<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
using System.ComponentModel.DataAnnotations;

<#=codeStringGenerator.EntityClassOpening(entity)#>
{
<#

然后找到那个自动生成属性的方法,在里面加上下面的验证,实体类中就会自动显示验证了

var simpleProperties = typeMapper.GetSimpleProperties(entity);
if (simpleProperties.Any())
{
foreach (var edmProperty in simpleProperties)
{
// begin max length attribute
if (code.Escape(edmProperty.TypeUsage) == "string")
{
int maxLength = 0;
if (edmProperty.TypeUsage.Facets["MaxLength"].Value != null && Int32.TryParse(edmProperty.TypeUsage.Facets["MaxLength"].Value.ToString(), out maxLength))
{

#>
[StringLength(<#=code.CreateLiteral(maxLength)#>, ErrorMessage="must be less than <#=code.CreateLiteral(maxLength)#> length")]
<#
}

if (edmProperty.ToString().ToLower() == "email")
{
#>
[RegularExpression(@"^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$",
ErrorMessage = "must be correct email")]
<#
}
else if (edmProperty.ToString().ToLower() == "website")
{
#>
[RegularExpression(@"http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?",
ErrorMessage = "must be correct website")]
<#
}
}
else if (code.Escape(edmProperty.TypeUsage) == "System.DateTime"||code.Escape(edmProperty.TypeUsage) == "Nullable<System.DateTime>")
{
#>
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}")]
<#
}
else if (code.Escape(edmProperty.TypeUsage) == "Nullable<int>"||code.Escape(edmProperty.TypeUsage) == "int")
{
#>
[Range(0, int.MaxValue, ErrorMessage = "must be digit")]
<#
}
else if (code.Escape(edmProperty.TypeUsage) == "Nullable<decimal>"||code.Escape(edmProperty.TypeUsage) == "decimal")
{
#>
[Range(0, double.MaxValue, ErrorMessage = "must be number")]
<#
}

// begin required attribute
if ( edmProperty.TypeUsage.Facets["Nullable"].Value.ToString() =="False")
{
#>
[Required]
<#
}
#>
<#=codeStringGenerator.Property(edmProperty)#>

<#
}
// ConfirmPassword
if (entity.Name.ToString() =="User")
{
#>
[Compare("Password", ErrorMessage = "must match password")]
[StringLength(500, ErrorMessage = "must be less than 500 length")]
[Required]
public string ConfirmPassword { get; set; }
<#
}
}

收获园豆:40
a85295853 | 初学一级 |园豆:2 | 2013-07-22 15:41
其他回答(3)
0

前端验证表单靠 jquery

geass.. | 园豆:1821 (小虾三级) | 2013-07-18 06:51
0

这种情况,1、选择前台验证,jquery.validation即可;

2、添加ViewModel层,让ViewModel中Model和View的结合点,在ViewModel上做注解数据验证;

3、直接在模型实体上,加上注解验证。

收获园豆:10
幻天芒 | 园豆:37205 (高人七级) | 2013-07-18 13:16
0

找到生成的model原代码,直接在上面加验证标签就可以。

小兵仔 | 园豆:1240 (小虾三级) | 2013-07-18 17:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册