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

.NET CustomValidator:阻止提交按钮

  •  0
  • Soulzityr  · 技术社区  · 6 年前

    我正在尝试向一些遗留代码添加自定义字段验证器。如果电子邮件不属于某个域,则应防止表单触发。

    这是我的标记。

    <asp:Textbox id="tbEmail" autocomplete="off" CssClass="txt260" runat="server" TabIndex="1"></asp:Textbox>          
    <asp:RequiredFieldValidator id="rfvEmail" runat="server" Display="Dynamic" ForeColor="" ControlToValidate="tbEmail" ErrorMessage="Required" CssClass="ValidatorError">Required</asp:RequiredFieldValidator>
    <asp:CustomValidator id="cfvEmail" runat="server" Display="Dynamic" ControlToValidate="tbEmail" ErrorMessage="Invalid Email" CssClass="ValidatorError" OnServerValidate="tbEmail_CustomValidate"></asp:CustomValidator>
    <asp:RegularExpressionValidator id="regExpEmail" runat="server" Display="Dynamic" ForeColor="" ControlToValidate="tbEmail" ErrorMessage="Invalid" CssClass="ValidatorError"></asp:RegularExpressionValidator>
    

    ...

    <asp:Button ID="bSubmit" Text=" CREATE ACCOUNT " CssClass="NewButton" runat="server" OnClientClick="DisabledUpdateButton()" OnClick="bSubmit_Click" />
    

    protected void tbEmail_CustomValidate(object source, ServerValidateEventArgs args)
    {
        List<string> approvedEmailDomains = new List<string>()
        {
            "domainnameihid.com"
        };
    
        if (!approvedEmailDomains.Any(x => tbEmail.Text.EndsWith(x)))
        {
            args.IsValid = false;
        }
    }
    

    1 回复  |  直到 6 年前
        1
  •  1
  •   VDWWD    6 年前

    您还需要创建客户端验证。你和我一起做吗 ClientValidationFunction 验证器的。

    <asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="tbEmail"
       ClientValidationFunction="allowedDomains" ErrorMessage="Not Valid"></asp:CustomValidator>
    
    <script type="text/javascript">
        function allowedDomains(sender, element) {
            var approvedDomains = ['<%= string.Join("', '", approvedEmailDomains) %>'];
            element.IsValid = $.inArray(element.Value, approvedDomains) > -1;
        }
    </script>
    

    要想让它发挥作用,你需要一个 public 列表

    public List<string> approvedEmailDomains;
    
    protected void Page_Load(object sender, EventArgs e)
    {
        approvedEmailDomains = new List<string>()
        {
            "domainnameihid.com",
            "stackoverflow.com"
        };
    }