ASP MVC验证时间

时间:2014-08-13 20:14:29

标签: validation

我正在尝试创建自定义数据注释时间验证程序以验证日期时间字段。我希望它能在客户端验证。 我在这个网站上找到了一个例子,但我认为它的一部分缺失了。 我相信我创建的类部分工作,因为它似乎验证新创建的条目,但在Edit中不验证。 也     我正在使用jquery-ui-timepicker-addon.js的时间戳。

I also have added this to my web.config 
 <add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

我已将jquery.validate.unobtrusive.js添加到我创建的timepicker包中。 下面你会看到我的模型,我创建的TimeAttribute类和我的Edit cshtml 非常感谢任何帮助

    [DisplayName("Injury Time")]
    [DataType(DataType.Time)]
    [Time]
    [DisplayFormat(DataFormatString = "{0:hh:mm tt}", ApplyFormatInEditMode = true)]
    public Nullable<System.DateTime> InjuryTime { get; set; }

` public class TimeAttribute:ValidationAttribute,IClientValidatable {     public IEnumerable GetClientValidationRules(ModelMetadata metadata,ControllerContext context)     {         yield返回新的ModelClientValidationRule         {             ErrorMessage = ErrorMessage,             ValidationType =“time”         };     }

public override bool IsValid(object value)
{
    DateTime time;
    if (value == null || !DateTime.TryParse(value.ToString(), out time))
        return false;

    return true;
}

} `
              @ Html.LabelFor(model =&gt; model.InjuryTime,new {@class =“control-label col-md-2”})                              @ Html.EditorFor(model =&gt; model.InjuryTime)                 @ Html.ValidationMessageFor(model =&gt; model.InjuryTime)                      

1 个答案:

答案 0 :(得分:0)

保持简单。使用[Remote]验证属性代替您已创建的。

有一个例子:

<强>型号:

[DisplayName("Injury Time")]
[DataType(DataType.Time)]
[Remote("CheckTime", "Home", ErrorMessage = "Please check this field")]
[DisplayFormat(DataFormatString = "{0:hh:mm tt}", ApplyFormatInEditMode = true)]
public Nullable<System.DateTime> InjuryTime { get; set; }

Home 是您的控制器。

<强>控制器:

public ActionResult CheckTime(Nullable<System.DateTime> InjuryTime)
        {
            if (InjuryTime == something)
            {
        // This show the error message of validation
                return Json(true, JsonRequestBehavior.AllowGet);
            }
            else
            {
        // This will ignore the validation
               return Json(false, JsonRequestBehavior.AllowGet);
            }
        }

就像那样简单。不必对视图进行任何修改。 随意问。