【问题标题】:Generic solution to disable server side validation from client side从客户端禁用服务器端验证的通用解决方案
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-21
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    相关资源
    最近更新 更多