【问题标题】:Asp.net validation error message to change labels text更改标签文本的 Asp.net 验证错误消息
【发布时间】:2026-02-19 17:15:01
【问题描述】:

我正在使用 asp.net 验证控件来验证用户输入。我想要的是使用验证控件生成的错误消息来更改标签文本。

<asp:Label ID="Label1" runat="server" Text="Whats your name"></asp:Label>
<asp:TextBox ID="nameB" Width="322px" Height="30px" runat="server"></asp:TextBox>

<asp:RequiredFieldValidator ID="RequiredFieldValidator1" ValidationGroup="business" runat="server" ErrorMessage="Please tell us your name." ControlToValidate="nameBuisness" CssClass="errMsg" Display="Dynamic"></asp:RequiredFieldValidator>

谢谢。

【问题讨论】:

  • 我喜欢这个想法,但我不确定是否可以使用常规的 ASP.NET 验证控件来完成。如果您对使用其他验证框架(例如 jQuery Validate 或其他一些 jQuery 验证插件)的解决方案持开放态度,我可以用您的示例写一个关于如何做到这一点的答案。
  • 嗨@TomasLycken 我是编程新手,所以任何建议和指南都非常适合学习。请展示你的建议谢谢。
  • 在阅读了其他人的答案后,我意识到我的想法并不真正适合 WebForms 范式 - 我想我做 ASP.NET MVC 的时间太长了:P 但是有有两个很好的建议供您尝试!

标签: asp.net validation webforms


【解决方案1】:

如果您的要求是要使用内置的 ASP.Net 验证控件进行此验证,那么您将需要使用 ASP.Net CustomValidator 控件。这不能使用 ASP.Net RequiredFieldValidator 控件来完成。要执行您指定的验证,请在您的页面上放置一个 CustomValidator 控件,以便标记如下所示:

<asp:Label ID="Label1" runat="server" Text="Whats your name"></asp:Label>

<asp:TextBox ID="nameB" Width="322px" Height="30px" runat="server"></asp:TextBox>

<asp:CustomValidator ID="CustValidator" runat="server" ControlToValidate="nameB" 
    ValidateEmptyText="true"  ErrorMessage="Please tell us your name."  
    onservervalidate="CustValidator_ServerValidate" Display="none"  >**</asp:CustomValidator>

<asp:Button ID="btnSubmit" runat="server" Text="Submit" onclick="btnSubmit_Click"  CausesValidation="true"  />

然后您需要编写自定义验证器。服务器端验证代码如下所示:

    protected void CustValidator_ServerValidate(object source, ServerValidateEventArgs args)
    {
        if (string.IsNullOrWhiteSpace(args.Value))
        {
            Label1.Text = CustValidator.ErrorMessage;
            args.IsValid = false;
        }
        else
        {
            Label1.Text = "Whats your name";
            args.IsValid = true;
        }
    }

此自定义验证器将为您提供所需的行为。

一般来说,当您使用 CustomValidator 控件时,您应该同时进行服务器端验证(为了安全)和客户端验证(为了更好的 UI 体验)。要获得客户端验证,您需要在 javascript 和/或 jQuery 中编写一个客户端函数来进行类似的验证,然后将其分配给自定义验证器的 ClientValidationFunction。

有关 CustomValidator 控件的更多信息,请参见MSDN documentation

【讨论】:

  • 嗨@Joe Alfano,谢谢,但有一个问题/如果我要删除上述代码中的两个 astriks,则错误消息将显示两次。顺便说一句,这是我想要实现的,link
  • 将验证器显示属性设置为无。我已经编辑了我的答案。
【解决方案2】:

一种方法是处理提交按钮的OnClientClick-事件并调用一个javascript函数,例如:

<script type="text/javascript">
    function displayValidationResult() {
        // Do nothing if client validation is not available
        if (typeof (Page_Validators) == "undefined") return;
        var LblName = document.getElementById('LblName');
        var RequiredName = document.getElementById('RequiredName');
        ValidatorValidate(RequiredName);
        if (!RequiredName.isvalid) {
            LblName.innerText = RequiredName.errormessage;
        }
    }
</script>

<asp:Label ID="LblName" runat="server" Text="Whats your name"></asp:Label>
<asp:TextBox ID="TxtNameBusiness" Width="322px" Height="30px" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredName" ValidationGroup="business"
    runat="server" ErrorMessage="Please tell us your name." ControlToValidate="TxtNameBusiness"
    CssClass="errMsg" Display="None"></asp:RequiredFieldValidator>
<asp:Button ID="BtnSumbit" runat="server"  Text="Submit"
    OnClientClick="displayValidationResult()" ValidationGroup="business" />

我使用了一些可用的 ASP.NET 客户端验证方法。我还将您的控件重命名为更有意义并添加了一个提交按钮。

ASP.NET Validation in Depth

【讨论】:

  • @Raghav:然后设置验证器的Display="None",编辑我的答案。
  • 非常感谢先生,顺便说一下,我想要实现的是link。上述方法是最优化的还是我应该去做其他事情。