【问题标题】:How to disable asp.net validator on client side?如何在客户端禁用 asp.net 验证器?
【发布时间】:2012-07-25 05:19:47
【问题描述】:

我有一个非常简单的 aspx 页面:

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>

<body>
    <form id="form1" runat="server">
    <div>
        <asp:textbox runat="server" ID="tbText" ValidationGroup="Address"></asp:textbox>
        <br />
        <asp:RequiredFieldValidator ID="rfvText" runat="server" ControlToValidate="tbText" 
            ValidationGroup="Address" ErrorMessage="RequiredFieldValidator">Enter text</asp:RequiredFieldValidator>
        <br />
        <asp:Button runat="server" Text="Submit" ID="btnSubmit" OnClick="Submit_Click" 
            ValidationGroup="Address" OnClientClick="DisableValidator();" />
        <script type="text/javascript">
            function DisableValidator() {
                alert('Called and disable validators before submit');

                var validator = document.getElementById("<%=rfvText.ClientID%>");
                validator.validationGroup = "someGroup";
                ValidatorEnable(validator, false);
            }
        </script>
    </div>
    </form>
</body>
</html>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Submit_Click(object sender, EventArgs e)
    {
        Validate("Address");
        if (!IsValid)
        {
            throw new Exception("Page is no valid");
        }
    }
}

页面上的所有元素都有 ValidationGroup="Address",但我需要在单击按钮之前禁用我的验证器。因此,在客户端站点上它被禁用,但是当我尝试在服务器上验证它时,我的页面在服务器上无效但在客户端上有效。

如何在客户端禁用验证器以在服务器上也禁用?

谢谢!

【问题讨论】:

标签: javascript asp.net validation


【解决方案1】:

当页面回发时,您必须以可编程的方式禁用它,但是您认为应该在客户端禁用验证器,然后需要在服务器上复制,并设置 Enabled="false"

【讨论】:

    【解决方案2】:

    如果您使用的是 .NET 4,请尝试使用 EnableClientScript 属性。我自己从未使用过,但根据docs,它应该可以满足您的需求。

    获取或设置一个值,指示是否启用客户端验证。

    <asp:Button runat="server" Text="Click Me" EnableClientScript="False" /> 
    

    【讨论】:

    • 你运行的是什么版本的 .NET?
    • Doh。该属性是 .NET 4 的新属性。
    【解决方案3】:

    您应该在验证控件上使用EnableClientScript="False",即:

    <asp:RequiredFieldValidator ID="rfvText" 
          runat="server" ControlToValidate="tbText"
          ValidationGroup="Address" 
          EnableClientScript="False"
          ErrorMessage="RequiredFieldValidator">Enter Text
     </asp:RequiredFieldValidator>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-30
      • 1970-01-01
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-10
      相关资源
      最近更新 更多