大佬教程收集整理的这篇文章主要介绍了jquery – 动态启用/禁用mvc服务器端验证,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的研究使我几乎没有解决方案.
客户端 – 通过编写jquery插件
(function ($) { $.fn.turnOffValidation = function (form) { var setTings = form.validate().setTings; for (var ruleIndex in setTings.rules) { delete setTings.rules[ruleIndex]; } }; })(jQuery);
并调用它
$('#btnSaveDraft').click(function () { $(this).turnOffValidation(jQuery('#myForm')); });
服务器端 – 但对于服务器端,我能找到的唯一解决方案是从ModelState中删除错误.我在Action Attribute中完成了它,因此它可以重用并且易于使用.
[AttributeUsage(AttributeTargets.All)] public class IgnoreValidationAttribute : ActionFilterAttribute { public override void OnActionExecuTing(ActionExecuTingContext filterContext) { var modelState = filterContext.Controller.ViewData.modelState; //modelState.Clear(); foreach (var modelValue in modelState.Values) { modelValue.Errors.Clear(); } } }
但这并不完全符合我的目的.如果可以防止这种情况发生,我们为什么要触发验证并清除错误?这可能吗?
有没有办法阻止服务器验证首先发生,而不是清除验证结果错误?
然后从IValidatabLeobject派生您的viewmodel
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { if (!IsDraft && StartDate > EndDatE) { yield return new ValidationResult("Start date should be less than end date",new[] { "StartDate" }); } }
这样,只有在非草稿时才会触发服务器端验证.
现在,对于客户端验证,使用实现IClientValidatable
这是方法:
public IEnumerable<modelclientvalidationrule> GetClientValidationRules (ModelMetadata Metadata,ControllerContext context) { }
我认为这比启用禁用验证更好.
希望有所帮助
以上是大佬教程为你收集整理的jquery – 动态启用/禁用mvc服务器端验证全部内容,希望文章能够帮你解决jquery – 动态启用/禁用mvc服务器端验证所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。