繁体   English   中英

从客户端禁用服务器端验证的通用解决方案

[英]Generic solution to disable server side validation from client side

我有这样的情况。

包含两个不同的DropDownList的两个div。 这两个div的可见性都由两个独立的复选框在客户端控制,并且两个DropDownLists都具有必需的字段验证器,我希望在隐藏div时将其禁用(即:未选中该复选框)。

因此,知道有一种方法可以让您禁用字段验证器客户端,因此我进行了快速搜索并重新找到了ValidatorEnable(Validator, Boolean); 连接完所有内容后,如果未选中此复选框,则可以成功忽略客户端验证,但是问题出在我打到服务器端。

在服务器上使用类似这样的典型方案

protected void btnSave_Click(object sender, EventArgs e)
{
    Page.Validate();
    if (Page.IsValid) 
    {

    }
}

在服务器方面-令我惊讶的是,我的直觉告诉我,这将同时影响双方-页面验证将继续报告IsValid = false 所以我用以下代码运行了一些测试...

$(Page_Validators).each(function (index, value) {
    ValidatorEnable(value, false);
});

并迅速确认,实际上ValidatorEnable方法仅会影响客户端验证,并且不会影响字段验证器的服务器端状态。

现在,我可能想到了几种方法来“ hackaly”处理此问题。 例如:检查回发中的复选框状态,并根据需要禁用验证器,设置一些隐藏字段等。但是问题是我在一个非常大的项目中使用了此功能,以后将使用我应用的标准形式。

因此,基本上,我希望找到一种通用解决方案,该解决方案不需要对ASP.NET中的字段验证器提供的典型简单性进行重大改动。 有任何想法吗?

PS:刚意识到,如果我对此不小心,可能会引入安全漏洞,对吗? 这可能就是Microsoft默认情况下不这样做的原因。

通过为每个验证器使用隐藏字段并通过客户端输入,操作或您想要的任何方式,可以使用非常简单的方法,只需通过javascript在这些隐藏字段中填写一些自定义值(如true和false)即可。

表单回发后,您可以检查隐藏字段的值为true或false,并可以根据这些值启用或禁用服务器端验证程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM