首页 新闻 搜索 专区 学院

CodeFirst中的模型验证(Range)

1
[已解决问题] 解决于 2012-03-16 16:16
 [Range(typeof(DateTime), DateTime.Now.AddYears(-65).ToShortDateString(), DateTime.Now.AddYears(-18).ToShortDateString(),ErrorMessage="aaa")]
public DateTime Birthday { get; set; }

我想对时间范围进行验证,但这种写法编译出错
 错误:

特性实参必须是特性形参类型的常量表达式、typeof表达式或数组表达式。

FreeSaber的主页 FreeSaber | 初学一级 | 园豆:85
提问于:2012-03-16 13:36
< >
分享
最佳答案
0

这个要使用自定义验证

代码:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = true, Inherited = true)]
public class DateTimeRangeAttribute : ValidationAttribute
{
public int MinAge { get; set; }
public int MaxAge { get; set; }

public DateTimeRangeAttribute()
:base()
{
this.MinAge = 18;
this.MaxAge = 65;
}

public override bool IsValid(object value)
{
DateTime date = DateTime.MinValue;
DateTime.TryParse(value.ToString(), out date);
if (date != DateTime.MinValue)
{
if (date > DateTime.Now.AddYears(-MaxAge) && date < DateTime.Now.AddYears(-MinAge))
{
return true;
}
}
return false;
}
}

在Model中这样写:

[Required]
[DateTimeRange(ErrorMessage = "Age must be between 18 and 65")]
public DateTime Birthday { get; set; }

然后在View中这样写:

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>UserInfo</legend>

<div class="editor-label">
@Html.LabelFor(model => model.Birthday)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Birthday)
@Html.ValidationMessageFor(model => model.Birthday)
</div>

<p>
<input type="submit" value="Create"/>
</p>
</fieldset>
}

<div>
@Html.ActionLink("Back to List", "Index")
</div>
artwl | 专家六级 |园豆:16526 | 2012-03-16 15:40

非常感谢你每次回答我的问题啊,小子没豆,只能言谢了。

FreeSaber | 园豆:85 (初学一级) | 2012-03-16 16:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册