jQuery   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了jquery – 动态启用/禁用mvc服务器端验证大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个带有多个提交按钮的mvc表单 – “保存草稿”和“发布”.目标是在单击“保存草稿”按钮并提交表单时跳过客户端( javascript / unobstructivE)验证和服务器端验证.但是如果单击“发布”按钮,我确实需要触发两次验证.

我的研究使我几乎没有解决方案.

客户端 – 通过编写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();
        }
    }
}

但这并不完全符合我的目的.如果可以防止这种情况发生,我们为什么要触发验证并清除错误?这可能吗?

有没有办法阻止服务器验证首先发生,而不是清除验证结果错误

解决方法

您可以在viewmodel中引入一个名为IsDraft的变量.

然后从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)
{

}

我认为这比启用禁用验证更好.

如果您需要帮助实现自定义客户端验证,请参阅这些链接

> Link
> Link

希望有所帮助

大佬总结

以上是大佬教程为你收集整理的jquery – 动态启用/禁用mvc服务器端验证全部内容,希望文章能够帮你解决jquery – 动态启用/禁用mvc服务器端验证所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。