c# - 自定义验证器不起作用,但允许回发

标签 c# asp.net validation webforms

        <div>
            <asp:Label ID="lblClientId" runat="server" CssClass="label" meta:resourcekey="lblClientIdResource" /> 
            <asp:TextBox ID="tbClientId" runat="server"  style="width:150px; "/>
            <asp:Button ID="btnClientId" runat="server"  style="width:50px;" meta:resourcekey="btnClientIdResource" />
            <asp:CustomValidator ID="rfvClientId" runat="server" ValidationGroup="ClientId" meta:resourcekey="rfvClientIdResource" ControlToValidate="tbClientId" ClientValidationFunction="BtnClickClientId" style="position:absolute;"  ValidateEmptyText="True" ><asp:Image ID="Image2" ImageUrl="caution_20.png" runat="server" /></asp:CustomValidator>
       </div>



<script type="text/javascript">
        function BtnClickClientId(session, args) {
            ButtonClick(session, args, "<%= tbClientId.ClientID %>", "<%= lblClientId.ClientID %>");
        }
        window.onload = function () {
            document.getElementById('<%= tbClientId.ClientID%>').focus();
        };
    </script>


<asp:ValidationSummary ID="ClientIdValidationSummary" runat="server" BackColor="LightGray" DisplayMode="BulletList" CssClass="validationSummary" EnableClientScript="true" HeaderText='<%$ Resources:GlobalResource, ValidationSummaryResource %>'/>

所以这个 ButtonClick() 方法是有效的并且已经过独立测试。问题是,当我在文本框中输入任何内容并单击按钮时,验证器将按预期工作并显示在屏幕上。然后它就消失了。它也永远不会显示在页面验证摘要中。我该如何让它发挥作用?

我还尝试在此文本框中设置必填字段验证器,它似乎可以使用,但我不想使用两个验证器。

     <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="tbClientId" ErrorMessage="RequiredFieldValidator" style="position:absolute;"><asp:Image ID="Image2" ImageUrl="caution_20.png" runat="server" /></asp:RequiredFieldValidator>
            <asp:CustomValidator ID="rfvClientId" runat="server" ValidationGroup="ClientId" meta:resourcekey="rfvClientIdResource" ControlToValidate="tbClientId" ClientValidationFunction="BtnClickClientId" style="position:absolute;"  ValidateEmptyText="True" ></asp:CustomValidator>

这段代码可以工作,但我不必使用 2 个验证器。

最佳答案

您需要根据您的要求在 javascript 函数中将“arg.IsValid”设置为“true”或“false”(即,当您认为验证成功时设置为“true”,否则设置为 false)。此外,在代码隐藏文件中,始终建议检查按钮的单击事件处理程序内的“Page.IsValid”属性。因此,在 javascript 中添加此内容。

  arg.IsValid = false;

并在代码后面

  protected void button_click(..)
  {
       if (Page.IsValid)
       {
           // Your code, if any exists
       }
  }

希望这有帮助!!

关于c# - 自定义验证器不起作用,但允许回发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7489557/

相关文章:

c# - Google Calendar API v3 - 在服务器上部署时请求超时

c# - 如何在 C# 中将具有 32 位颜色质量的位图图像转换为 16 位颜色质量

c# - System.Drawing 不存在?

asp.net - 使用 [WebMethod] 转义 JSON 响应

wpf - 如何触发此错误模板?

javascript - 在 Javascript 中验证(澳大利亚)电话号码

c# - ObjectSet.AddObject(T) 问题?

c# - SPListItem 更新时保存冲突

asp.net - 为什么 session 自动结束

javascript - slickgrid 验证将要添加的行