代码之家  ›  专栏  ›  技术社区  ›  Xinus

ASP.NET:即使使用了必需的字段验证程序,自定义验证也不起作用

  •  4
  • Xinus  · 技术社区  · 15 年前

    这是我的Web窗体控件的代码

    <asp:TextBox runat="server" ID="txtUsername"></asp:TextBox>
    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="txtUsername" runat="server" ErrorMessage="RequiredFieldValidator"></asp:RequiredFieldValidator>
    <asp:CustomValidator OnServerValidate="checkUsername" ID="CustomValidator1" runat="server" ControlToValidate="txtUsername" EnableClientScript="true" ClientValidationFunction="checkUsername" ErrorMessage="CustomValidator"></asp:CustomValidator>
    

    客户端验证

    <script type="text/javascript">
            function checkUsername(source,args){
            alert("test");
               /* alert(args.Value);
                args.IsValid=false;
                */
            }
        </script>
    

    服务器端验证

    protected void checkUsername(object sender, System.Web.UI.WebControls.ServerValidateEventArgs e) {
                String str=e.Value;
                if(str.Length>6)
                e.IsValid = false;
            }
    

    但出于某种原因,这一成本验证并没有启动。有什么线索吗?

    编辑: 我第一次在ASP中编码,服务器验证在代码隐藏类中

    这是一个ASP.NET代码页,也许是我犯的一个小错误?

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Registration.aspx.cs" Inherits="lab1.Registration" %>
    
    <!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>Untitled Page</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
    
            <asp:Button ID="Button1" runat="server" Text="Recreate table" 
                onclick="Button1_Click" />
            <asp:GridView ID="GridView1" runat="server">
            </asp:GridView>
    
        </div>
        <script type="text/javascript">
            function checkUsername(source,args){
            args.IsValid=(args.Value.length<=6);
               /* alert(source.Value);
                args.IsValid=false;
                alert(document.getElementById("txtUsername").nodeValue);*/
            }
        </script>
        <asp:Table ID="Table1" runat="server" Height="106px" Width="469px">
    
            <asp:TableRow>
                <asp:TableCell>
                    <asp:Label runat="server" Text="Username"></asp:Label>
                </asp:TableCell>
                <asp:TableCell>
                    <asp:TextBox runat="server" ID="txtUsername"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="txtUsername" runat="server" ErrorMessage="RequiredFieldValidator"></asp:RequiredFieldValidator>
                    <asp:CustomValidator OnServerValidate="checkUsername" ID="CustomValidator1" runat="server" ControlToValidate="txtUsername" EnableClientScript="true" ClientValidationFunction="checkUsername" ErrorMessage="CustomValidator"></asp:CustomValidator>
    
                </asp:TableCell>
            </asp:TableRow>
    
        </asp:Table>
    
        </form>
    </body>
    </html>
    
    3 回复  |  直到 12 年前
        1
  •  1
  •   Robin Day    15 年前

    好的,试着这样改变你的两种方法。

    <script type="text/javascript"> 
        function checkUsername(source,args){    
            args.IsValid=(args.Value.length<=6);
        }
    </script>
    

    protected void checkUsername(object sender, System.Web.UI.WebControls.ServerValidateEventArgs e)
    {
        e.IsValid = (e.Value.Length <= 6);
    }
    

    唯一真正的区别是它计算出正确和错误是有效的,而不仅仅是设置为错误。

    如果这不是问题所在,那么请详细说明什么不起作用。

    编辑:只需添加到此…如果只是您感兴趣的一段输入,那么为什么不使用RegularExpressionValidator呢?

        2
  •  0
  •   bitsprint    14 年前

    将控件添加到已经验证了控件的页时,可能会发生这种情况。在这些场景中,通常先验证其他控件,然后再验证新控件。

    这可以通过添加特定于已添加的控件和按钮的ValidationGroup属性来解决。

        3
  •  0
  •   Yoosaf Abdulla    12 年前

    以上所有方法都失败了,因为我的控件在更新面板(ASP.2.0)中。

    最后page.isvalid()保存了我的一天。

    还检查: http://forums.asp.net/t/1216367.aspx/1