【发布时间】:2012-07-11 08:50:25
【问题描述】:
我有这样的场景。
两个 div 包含两个不同的 DropDownList。这两个 div 的可见性都由两个独立的复选框控制客户端,并且两个 DropDownLists 都需要字段验证器,我希望在隐藏 div 时禁用这些验证器(即:未选中复选框)。 p>
所以知道有一种方法可以让您禁用字段验证器客户端,我快速搜索并重新找到了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”处理这个问题。例如:检查回发时的复选框状态并根据需要禁用验证器,设置一些隐藏字段等。但问题是我在 非常大 项目中使用此功能以及我的标准apply 将用于所有未来的形式。
所以基本上我希望找到一个通用的解决方案,它不需要对 ASP.NET 中的字段验证器提供的典型简单性进行重大更改。有什么想法吗?
PS:刚刚意识到,如果我对此不小心,我可能会引入安全漏洞,对吧?这可能是微软默认不这样做的原因。
【问题讨论】:
-
在我进入你的 PS 之前,这就是我的全部想法。服务器端验证可以是trusted,因为客户端无法绕过它。客户端验证只是为了方便。
-
我没有看到任何关于根据复选框状态禁用验证器的问题。那是您的应用程序逻辑对吗?如果未选中复选框,则禁用验证器。
-
两部分的公平点。然而,我会争辩说,这个功能的“选择加入”政策仍然是安全的,我想你是对的,仅仅检查复选框状态并不算太糟糕,但在一个有几十万行的项目上(你是独立写的),每一个保存的行都是天赐之物。
标签: c# asp.net validation requiredfieldvalidator