【发布时间】:2014-05-01 21:35:51
【问题描述】:
我的表单上有两个日期选择器字段,我想验证截止日期是否大于起始日期。
MVC5 中是否有任何验证属性可用于实现此目的?
我也希望这可以在客户端工作,请问有人可以帮助在 MVC 中启用客户端验证吗?
非常感谢
编辑:创建了自定义属性,但客户端验证不起作用。
public class ValidateToDateAttribute : ValidationAttribute, IClientValidatable
{
public string errorMessageKey { get; private set; }
public ValidateToDateAttribute(string errorMessageKey)
{
this.errorMessageKey = errorMessageKey;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value != null)
{
var viewModel = (TransactionViewModel)validationContext.ObjectInstance;
if (viewModel.ToDate.CompareTo(viewModel.FromDate) < 0)
{
return new ValidationResult(new ResourceManager(typeof(ValidationErrorMessages)).GetString(errorMessageKey));
}
}
return ValidationResult.Success;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var modelClientValidationRule = new ModelClientValidationRule
{
ValidationType = "validatetodate",
ErrorMessage = new ResourceManager(typeof(ValidationErrorMessages)).GetString(errorMessageKey)
};
yield return modelClientValidationRule;
}
}
}
Bundle.Config
bundles.Add(new ScriptBundle("~/bundles/jqueryvalidation").Include(
"~/Scripts/jquery.validate.unobtrusive.min.js",
"~/Scripts/jquery.unobtrusive-ajax.min.js"));
查看模型
[Display(ResourceType = typeof(DisplayLabelText), Name = "FromDate")]
public DateTime FromDate { get; set; }
[Display(ResourceType = typeof(DisplayLabelText), Name = "ToDate")]
[ValidateToDate("ToDateMustBeGreater")]
public DateTime ToDate { get; set; }
在视图中:
<div class="col-sm-7 margin-top-10">
<div class="col-sm-12">
@Html.LabelFor(m => m.FromDate, new { @class = "col-sm-3 form-group control-label" })
<div class="col-sm-8">
@Html.TextBoxFor(m => m.FromDate, "{0:MMM dd yyyy}", new { @class = "datepicker", disabled = "disabled" })
</div>
</div>
<div class="col-sm-12">
@Html.LabelFor(m => m.ToDate, new { @class = "col-sm-3 form-group control-label" })
<div class="col-sm-8">
@Html.TextBoxFor(m => m.ToDate, "{0:MMM dd yyyy}", new { @class = "datepicker", disabled = "disabled" })
@Html.ValidationMessageFor(m => m.ToDate)
</div>
</div>
<button type="submit" class="apply-filter-button">Apply Filter</button>
</div>
【问题讨论】:
-
我们不是来为您提供完整的教程或为您完成所有工作/研究。我们主要在这里帮助您编写一段代码或回答一个简洁的问题。见:stackoverflow.com/help/how-to-ask
-
当您询问 MVC5 时,为什么要使用 MVC3 和 MVC4 标签?此处不允许发送垃圾邮件。
-
无意标记垃圾邮件,我只是认为 mvc3 和 mvc4 的解决方案可能对 MVC5 仍然有效。
-
编辑帖子并添加代码。
-
"我只是认为 mvc3 和 mvc4 的解决方案可能对 MVC5 仍然有效" ~ 是的,这几乎就是标签垃圾邮件的定义。