クライアント側の検証には、カスタムルールで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;
}
}