【问题标题】:How can I rewrite the ErrorMessage for a CustomValidator control on the client?如何为客户端上的 CustomValidator 控件重写 ErrorMessage?
【发布时间】:2010-11-16 20:20:41
【问题描述】:

我有一个 CustomValidator,它正在为几种不同的电话编号方案验证电话号码。客户端 javascript 如下所示:

validatePhoneNumber(sender, args) {
    cleanNumber = args.Value.replace(/\D/, "");
    country = $("#" + CountryID).get(0).value;
    switch (country) {
        case "North America":
            args.IsValid = validateNAPhoneNumber(cleanNumber);
            if (!args.IsValid) sender.errormessage = "* Not a NA Phone #";
            break;
        case "UK":
            args.IsValid = validateUKPhoneNumber(cleanumber);
            if (!args.IsValid) sender.errormessage = "* Not a UK Phone #";
            break;
...
    }
}

实际验证正确进行,并且 CustomValidator 始终具有正确的 IsValid 属性。然而,sender.errormessage 似乎在这个函数调用它的默认值之后被重写了。如何更改 errormessage 值,并使其“粘住”?

【问题讨论】:

    标签: asp.net javascript validation client-side ecma262


    【解决方案1】:
    function dateofbirth(sender, args) {
    
        var dtcDOB = document.getElementById('<%= dtcDOB.ClientID %>');
    
        var dob = new Date(dtcDOB.value);
        var currDate = new Date();
    
        if (dtcDOB.value == "") {
            args.IsValid = false;
            sender.textContent = "Provide DOB.";
            return;
        }
    
        args.IsValid = true;
    }
    

    试试sender.textContent = "your err msg"。 它对我有用。

    【讨论】:

      【解决方案2】:

      使用图像更改验证器控件的错误消息的最佳方法是:

      sender.innerHTML = "YOUR HTML WITH ANYTHING COME HERE"
      

      【讨论】:

      • 请注意,如果错误消息是动态的,则可以注入 HTML。如果您不想呈现 HTML,请使用 textContent
      【解决方案3】:

      要更改错误消息,请执行以下操作:

      if (!args.IsValid) document.getElementById('<%= cstPhoneNumber.ClientID %>').errormessage = "* Not a NA Phone #";
      

      要更改文本,请执行以下操作:

      if (!args.IsValid) document.getElementById('<%= cstPhoneNumber.ClientID %>').innerHTML = "* Not a NA Phone #";
      

      cstPhoneNumber 应替换为您的验证控件的名称。

      【讨论】:

        【解决方案4】:

        看起来你正在使用 jquery,所以你可以这样设置错误消息:

        $(sender).text("* Not a NA Phone #");
        

        编辑:

        抱歉耽搁了,但我正在休假。

        我正在和simple page 玩一轮,我想我明白这是如何工作的。

        当您在客户端验证功能中设置发送方的错误消息时,您正在设置ErrorMessage 属性的等效项。 这与 Text 属性不同。 ErrorMessage 设置验证摘要中显示的文本,而Text 属性是验证器控件中显示的文本。请注意,如果您只设置ErrorMessage 属性(在服务器上),那么ErrorMessage 将被复制到Text 属性中。

        这意味着当您设置sender.errormessage 时,您实际设置了验证摘要中显示的文本。

        希望这将有助于清除它。但是,我仍然没有看到从客户端验证功能更改Text 属性的方法。我也不确定为什么您的发件人对象不是验证器对象。

        【讨论】:

        • 试过了,但没有。挖掘了一下,我发现 sender 不是 span 元素,而是其他一些不显示任何内容的 DOM 对象。不过,谢谢。
        • 这很奇怪,当我在家里尝试这个时,发件人是跨度。 sender 对象与 span 有什么关系?您可能能够从发件人访问跨度。如果没有,您是否有办法在脚本中获取跨度的 ID?如果是这样,您仍然可以这样做。抱歉,我现在正在工作,无法提供更多帮助。
        • 许多网站声明“sender.errormessage”构造是执行此操作的方法,因此我怀疑我在阻止任何这些方法的宏伟计划中做错了什么从工作。我想我必须编写一个测试页面,看看一个更简单的版本是否不像每个人都期望的那样运行。
        【解决方案5】:

        sender.innerText = "Your message" 可以工作。

        【讨论】:

          【解决方案6】:

          我认为问题在于客户端没有“错误消息”属性。自定义验证器呈现 &lt;span&gt; 标记以显示错误消息,其 id 对应于自定义验证器控件的 id 属性。要设置验证失败时显示的文本,您需要执行以下操作。

          ... 
          case "North America":
              args.IsValid = validateNAPhoneNumber(cleanNumber);
              if (!args.IsValid) 
                  document.getElementById(sender.id).innerText = "* Not a NA Phone #";
              break;
          ...
          

          【讨论】:

          • 不等于document.getElementById(sender.id) 等于sender
          • 这实际上是我开始这样做的方式,但这也不起作用。碰巧的是,js sender.errormessage 成员在页面首次加载时确实与 CustomValidator.ErrorMessage 具有相同的内容,但更改该内容不会更改显示的消息。
          【解决方案7】:

          只需删除自定义验证器标记定义中的所有 Text 和 ErrorMessage 实例 然后使用

          $(#id_of_custom_validation_control).text("custom error message");
          

          然后,您可以使用一个自定义验证器控件并处理多个错误条件

          例如

          if(error1){
            $(#id_of_custom_validation_control).text("custom error message1");
          }else $(#id_of_custom_validation_control).text("custom error message2");
          

          希望对你有帮助

          【讨论】:

            【解决方案8】:

            使用 jQuery 扩展 @Andy 响应:

            更改短信(显示在表格中):

            $('#<%=this.[Validator].ClientID%>').text('Text to show');
            

            更改错误消息(用于摘要控件):

            $('#<%=this.[Validator].ClientID%>').attr('errormessage', 'Text to show');
            

            [Validator] 替换为您的验证者名称。

            【讨论】:

              【解决方案9】:

              试试这个...

              在 Javascript 中使用 sender.textContext 获取错误消息并设置您的 CustomValidator:

              <asp:CustomValidator ID="cvdPhoneNumber" runat="server" Display="Dynamic" ForeColor="Red" ControlToValidate="txtPhoneNumber" ClientValidationFunction="validatePhoneNumber" ErrorMessage=""  />
              

              【讨论】:

                猜你喜欢
                • 2010-10-18
                • 2023-03-23
                • 2012-06-21
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-11-19
                • 1970-01-01
                • 2015-06-15
                相关资源
                最近更新 更多