您仍然可以将 jquery.validate 与自定义规则一起用于客户端验证。对于服务器端,我建议使用字符串字段作为 DateTime 值,您可以尝试在模型绑定器中将其转换为 DateTime,如果它不正确,则会引发验证错误(实际上您可以使用自定义模型绑定器)。所以在表单验证失败后你总是会保持错误的值
upd:要实现自定义模型绑定器,您需要以下步骤(没有真正检查代码,如果有任何错误,请告诉我):
在 global.asax 中:
protected void Application_Start()
{
ModelBinders.Binders.Add(typeof(your_model_type), new YourModelTypeBinder());
}
所以现在你需要类 YourModelTypeBinder 为:
public class YourModelTypeBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var model = base.BindModel(controllerContext, bindingContext) as YourModelType;
if (model != null)
{
if (bindingContext.ValueProvider.ContainsPrefix("DateTimeString"))
{
ValueProviderResult valueResult = bindingContext.ValueProvider.GetValue(key);
try
{
var s = valueResult.ConvertTo(string);
var valid = DateTime.TryParse(s, out model.RealDateTime);
if (!valid)
bindingContext.ModelState.AddModelError("DateTimeString", "Not a valid date");
}
catch
{
bindingContext.ModelState.AddModelError("DateTimeString", "Not a valid date");
}
}
}
return model;
}
}