【发布时间】:2013-12-04 11:36:12
【问题描述】:
我编写了一个代码来验证传入的数据。
所有内置验证(RequiredAttribute等)都有效...
但我自己的写的 DateRangeAttribute 不会在帖子上触发错误,帖子会发到我的控制器 :(。
被覆盖的 IsValid 方法发回 good(false) 值,并且在服务器端控制器可以正确看到 Invalid ModelState,但客户端看不到。
数据验证属性在浏览器上呈现为 HTML:
我希望在所有数据都真正有效之前避免发帖。
有代码:
日期范围属性
public class DateRangeAttribute : RangeAttribute
{
public DateRangeAttribute (string minimumYear)
:base(typeof(DateTime), minimumYear, DateTime.Now.Year.ToString())
{
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var inputYear = value as int?;
var result = (inputYear != null && inputYear >= 1886 && inputYear <= DateTime.Now.Year);
return result ? ValidationResult.Success : new ValidationResult(GetErrorMessage());
}
private string GetErrorMessage()
{
return "The year must be greater than 1886 and lower than the actual year.";
}
public override string FormatErrorMessage(string name)
{
return string.Format(GetErrorMessage(), name);
}
}
创建.cshtml
<script src="@Url.Content("~/Scripts/jquery-1.8.2.min.js")" type="text/javascript"></script>
<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("Create", "Car", FormMethod.Post, new { id = "CreateForm" }))
{
@Html.ValidationSummary(true)
<!-- ... -->
@Html.LabelFor(model => model.Year)
@Html.EditorFor(model => model.Year)
@Html.ValidationMessageFor(model => model.Year)
<!-- ... -->
}
Web.Config file:
<configuration>
<appSettings>
<!-- ... -->
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
<!-- ... -->
</configuration>
【问题讨论】:
标签: c# jquery asp.net-mvc validation