【问题标题】:Text box disabled on the client side still enabled on the server side在客户端禁用的文本框仍然在服务器端启用
【发布时间】:2012-05-16 16:08:14
【问题描述】:

在 ASP.NET 中,RequiredFieldValidator 仍然验证文本框控件,即使我在客户端禁用它也是如此。我想通过使用CustomValidator 来摆脱这种行为。在验证功能中,我检查是否启用了文本框。如果是这种情况,我将验证器设置为有效。

function ValidateTextBox(sender, args) {

    var $textbox = $('#txtFoo')
    args.isValid = $textbox.prop('disabled') || $textbox.val();

}

这在客户端运行良好。问题是,我使用 JavaScript 在客户端更改了文本框的状态。因此,服务器不知道更改的状态(文本框控件现在已禁用)。因此,当引发自定义验证器的ServerValidate 事件时(例如通过调用Page.Validate),我无法检查文本框是否被禁用。因为服务器不知道这一点,所以无论我在客户端做什么,Enabled 属性始终设置为 true。
Postback期间如何禁用控件验证或告诉服务器文本框的状态?

感谢您的宝贵时间。

【问题讨论】:

  • 服务器能否从其他控件(或页面其余部分)的状态中判断文本框是否会在客户端被禁用?最安全的验证方法就是复制您当前拥有的客户端逻辑,因为无论如何,所有客户端脚本和表单值都可以通过通用调试工具进行更改。
  • 这肯定行得通。我正在使用用户控件将标签输入字段和验证器组合到一个控件中。如果控件可以自动处理,而不必依赖于它所使用的页面的代码,那就太好了。我的意思是这就是 ASP.NET 验证控件的优势。您不必手动检查每个控件的状态。您只需要调用 Page.Validate 就可以了。
  • 当使用 JavaScript 更改文本框的值时,服务器知道这一点,因为它的值将被发送回服务器。是否可以使用这种机制额外发送文本框的禁用状态及其值?
  • 我没有检查这是否有效,因为一个快速的解决方案是在回发期间更改服务器上控件的状态。该项目现在已经完成,但也许解决方案是使用 HTML5 数据属性来呈现控件验证器的客户端 ID。在客户端禁用控件时,您可以调用函数 ValidatorEnable 并传递存储在 data 属性中的验证器的 ID。如果这也会禁用服务器端的验证器,那么问题就解决了,否则就不行了。

标签: asp.net validation requiredfieldvalidator customvalidator


【解决方案1】:
  1. 尝试将文本框设置为'ReadOnly' 模式,而不是使'disabled'

  2. 当您使用 ValidatorEnable JavaScript 方法禁用文本框时,您可以 EnableDisable 您的 RequiredFieldValidator (reference)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 2012-10-25
    • 1970-01-01
    • 2014-03-26
    相关资源
    最近更新 更多