我创建了一个自定义验证属性进行客户端验证?自定义属性
Q
自定义属性
69
A
回答
161
下面是如何进行的:
开始通过定义自定义验证属性:
public class FutureDateAttribute : ValidationAttribute, IClientValidatable
{
public override bool IsValid(object value)
{
if (value == null || (DateTime)value < DateTime.Now)
return false;
return true;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
yield return new ModelClientValidationRule
{
ErrorMessage = this.ErrorMessage,
ValidationType = "futuredate"
};
}
}
注意它是如何实现IClientValidatable。接下来,我们写我们的模型:
public class MyViewModel
{
[FutureDate(ErrorMessage = "Should be in the future")]
public DateTime Date { get; set; }
}
然后控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new MyViewModel
{
// intentionally put in the past
Date = DateTime.Now.AddDays(-1)
});
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
return View(model);
}
}
最后一个观点:
@using (Html.BeginForm())
{
@Html.LabelFor(x => x.Date)
@Html.TextBoxFor(x => x.Date)
@Html.ValidationMessageFor(x => x.Date)
<input type="submit" value="OK" />
}
的神奇发生的最后一部分是定义自定义适配器:
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
<script type="text/javascript">
// we add a custom jquery validation method
jQuery.validator.addMethod('greaterThan', function (value, element, params) {
if (!/Invalid|NaN/.test(new Date(value))) {
return new Date(value) > new Date($(params).val());
}
return isNaN(value) && isNaN($(params).val()) || (parseFloat(value) > parseFloat($(params).val()));
}, '');
// and an unobtrusive adapter
jQuery.validator.unobtrusive.adapters.add('futuredate', { }, function (options) {
options.rules['greaterThan'] = true;
options.messages['greaterThan'] = options.message;
});
</script>
4
它花了一会儿,因为你的问题被问,但如果你还是喜欢的元数据,并且你还开着简化方案,则可以使用以下注解解决您的问题:
[Required]
[AssertThat("Date > Now()")]
public DateTime? Date { get; set; }
它同时适用于 - 服务器和客户端,盒子外面。欲了解更多详情,请看ExpressiveAnnotations图书馆。
相关问题
- 1. 自定义属性
- 2. 自定义属性
- 3. 自定义属性
- 4. 自定义属性
- 5. 自定义属性
- 6. 自定义属性
- 7. 自定义与非自定义属性?
- 8. 自定义属性vs data- *属性
- 9. 颜色属性在自定义属性
- 10. C#自定义属性属性反射
- 11. Django自定义FileField属性和属性
- 12. 自定义属性的属性
- 13. 引用属性的自定义属性
- 14. android在自定义视图上并排定义属性和自定义属性
- 15. 自定义属性未定义
- 16. IMG定义自定义属性
- 17. xhtml自定义属性定义
- 18. Qml定义自定义属性组
- 19. 在Eloquent中定义自定义属性
- 20. 在CIL中定义自定义属性
- 21. 自定义主题属性?
- 22. SQLAlchemy自定义属性
- 23. 只读自定义属性
- 24. QML自定义属性
- 25. TwoLineListItem - 自定义属性
- 26. 访问自定义属性
- 27. 自定义授权属性
- 28. 处理自定义属性
- 29. 自定义文件属性
- 30. 自定义授权属性
辉煌的答案! – raklos 2011-01-20 13:46:18
几乎工作 - 日期应该是什么格式? – raklos 2011-01-20 15:01:56