【发布时间】:2015-02-24 00:24:15
【问题描述】:
我有一个自定义验证类来验证日期。它适用于服务器端,但不适用于客户端。我无法触发 jquery 方法进行检查。我想我的适配器或验证器可能连接不正确。 附:我可以让非自定义客户端验证工作(例如 [必需]),而不是我的自定义验证
查看模型
public class HomePageViewModel
{
[Required]
public string SearchQuery { get; set; }
[DisplayName("Date")]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
[ClassDate(ErrorMessage = "Class date must be today or later.")]
public DateTime ClassDate { get; set; }
}
验证类。
public class ClassDateAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
if (value == null) // ok, just use todays date day
{
return true;
}
DateTime toValidate = (DateTime) value;
if (toValidate.Day < DateTime.Now.Day) // if they are looking for classes in the past
{
return false;
}
return true;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata,
ControllerContext context)
{
var classDateRule = new ModelClientValidationRule();
classDateRule.ErrorMessage = "test error message";
classDateRule.ValidationType = "classdate";
yield return classDateRule;
}
}
Javascript 代码。
$(function () {
$(".datefield").datepicker();
var now = new Date();
var day = ("0" + now.getDate()).slice(-2);
var month = ("0" + (now.getMonth() + 1)).slice(-2);
var today = (month) + "/" + (day) + "/" + now.getFullYear();
$('.datefield').val(today);
$.validator.unobtrusive.adapters.addSingleVal("classdate");
$.validator.addMethod("classdate", function(value) {
if (value) {
//do something to test date here
//if date is today or later
return true;
}
return false;
});
});
这是我认为的元素。
@Html.TextBoxFor(model => model.ClassDate, new { @class = "datefield form-control", @id = "ClassDate", @type = "date", name = "ClassDate" })
@Html.ValidationMessageFor(model => model.ClassDate, "", new { @class = "text-danger" })
【问题讨论】:
-
既然您使用了数据选择器(假设这是 jquery ui),那么为什么不直接设置
minDate: 0,? (以及为什么你有@id = "ClassDate", @type = "date", name = "ClassDate"- 所有这些都是毫无意义的,因为无论如何这都是助手渲染的) -
我想我会用当前时间将 minDate 设置为今天。我不希望任何人选择过去的日期/时间。但是为了让这个连接起来,你能看到任何问题吗?我知道我需要在项目的其他领域进行自定义客户端验证,因此了解这里发生的情况会有所帮助。
标签: javascript jquery asp.net-mvc validation