0

我有这样的场景。

包含两个不同 DropDownLists 的两个 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:刚刚意识到,如果我对此不小心,我可能会引入安全漏洞,对吗?这可能是微软默认不这样做的原因。

4

1 回答 1

0

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

回发表单时,您可以检查隐藏字段值的真假,并根据这些值启用或禁用服务器端验证器。

于 2012-07-11T08:57:03.147 回答