从客户端禁用服务器端验证的通用解决方案
本文关键字:解决方案 验证 服务器端 客户端 | 更新日期: 2024-04-03 07:41:55
我有这样一个场景。
包含两个不同DropDownList的两个div。这两个div的可见性都由客户端的两个独立复选框控制,并且两个DropDownList都有必需的字段验证器,我希望在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方法实际上只影响客户端验证,而不影响字段验证器的服务器端状态。
现在,我可能会不假思索地想出几个方法来"巧妙"地处理这个问题。例如:在回发时选中复选框状态,根据需要禁用验证器,设置一些隐藏字段等。但问题是,我在超大项目中使用此功能,并且我应用的标准将在未来的所有表单中使用。
因此,基本上我希望找到一个通用的解决方案,它不需要对ASP.NET中的字段验证器所提供的典型简单性进行重大更改。有什么想法吗?
PS:我刚刚意识到,如果我不小心,我可能会引入一个安全漏洞,对吧?这可能就是微软默认不这么做的原因。
可以使用一种非常简单的方法,即为每个验证器使用一个隐藏字段,并通过客户端输入、操作或任何您想要的操作,只需通过javascript在这些隐藏字段中填充一些自定义值,如true和false。
当表单返回时,您可以检查隐藏字段值是否为true或false,根据这些值,您可以启用或禁用服务器端验证器。