【问题标题】:Reset an asp.net validation control via javascript?通过javascript重置asp.net验证控件?
【发布时间】:2010-05-26 18:53:47
【问题描述】:

如何通过 JavaScript 重置 asp.net 验证控件?当前代码示例会清除错误消息文本,但不会为下一次表单提交重置验证控件。

var cv= document.getElementById("<%= MyValidationContorl.ClientID %>");
cv.innerHTML = '';

更新:

这是表单的完整代码示例。我似乎无法在提交另一个表单时触发验证控件:

function ClearData() {
    var cv = document.getElementById("<%= MyValidationContorl.ClientID %>");
    cv.innerHTML = '';
}

<html>
   <form>
       <asp:TextBox id="MyTextControl" runat="server" />
       <asp:CustomValidator ID="MyValidationContorl" runat="server" />
       <input type="button" onclick="javascript:ClearCCData(); return false;" runat="server" />
   </form>
</html>

【问题讨论】:

  • @azamsharp -- 我的意思是从一开始就启用验证过程。

标签: asp.net javascript validation reset


【解决方案1】:

每次发布​​帖子时都会触发页面验证,问题似乎是您正在清除验证器内容cv.innerHTML = '';,这样您的验证器消息就会永远丢失,您会认为验证不会再次触发.

对于@Glennular 答案,代码不处理验证器Display 属性,如果其设置为Dynamic,验证器将使用validator.style.display 切换,但如果其设置为NoneInline然后将使用validator.style.visibility 属性。

最好改用asp.net ValidatorUpdateDisplay

<script type="text/javascript">
    function Page_ClientValidateReset() {
        if (typeof (Page_Validators) != "undefined") {
            for (var i = 0; i < Page_Validators.length; i++) {
                var validator = Page_Validators[i]; 
                validator.isvalid = true;
                ValidatorUpdateDisplay(validator);
            }
        }
    }
</script>

更新:重置验证摘要

<script type="text/javascript">
function Page_ValidationSummariesReset(){
    if (typeof(Page_ValidationSummaries) == "undefined")
            return;
    for (var i = 0; i < Page_ValidationSummaries.length; i++)
            Page_ValidationSummaries[i].style.display = "none";

}
</script>

【讨论】:

  • 嗨@MK ..你的功能很好用..它重置了我想要的所有验证器,但它不会重置验证摘要。你有任何代码可以完成这项工作吗?非常感谢。我非常需要它。
  • @LaurenceNyein 我更新了答案以包含重置验证摘要方法。
【解决方案2】:

这会重置所有验证组中的所有验证器。

<script type="text/javascript">
    Page_ClientValidate('');
</script>

【讨论】:

  • 完美,正是我需要的
  • 如果你使用它,请确保你为所有验证器定义了ValidationGroup...否则它将触发没有组的验证器。如果你真的很懒,不想为每个元素定义一个验证组,你可以组成一个不会用作验证组的随机字符串,如下所示:Page_ClientValidate('reset-all');
  • 空字符串会触发所有验证器。
  • 这不会重置验证器。正如@dhsto 所说,这触发验证针对一个空的ValidationGroup,它很可能存在。
  • 如果你传递一个永远不能是验证组名称的字符串(例如 GUID)会更好。这将导致 ASP.NET 对不存在的验证组执行验证,从而重置所有验证器。
【解决方案3】:

试试下面这段代码:

$("#<%= txtUserSettingsEmailRequiredValidator.ClientID %>").css("display", "none");

我希望这对我有用。 :)

【讨论】:

    【解决方案4】:

    这里是重置所有验证器的代码

    function CleanForm() {
        document.forms[0].reset(); 
    
        for (i = 0; i < Page_Validators.length; i++) {
            Page_Validators[i].style.visibility = 'hidden';
        }
    
        return false;
    }
    

    或单个:

    document.getElementById("<%= MyValidationContorl.ClientID %>").style.visibility
     = 'hidden';
    

    【讨论】:

    • 它隐藏了验证控件,但是当我尝试提交另一个表单时,它不会再次触发验证控件。
    【解决方案5】:

    使用Page_Validators[i].style.visibility = 'hidden'; 不要为我工作,所以我改用这行代码:Page_Validators[i].enabled = false;

    if (sFirstName == "" && sLastName == "") 
        {
    
            alert('Reminder: Please first enter student ID to search for the student information before filling out the rest of the form field values');
            //Disable all require field validation coontrol on the form so the user could continue to use the Lookup student function.
            document.forms[0].reset();
            for (i = 0; i < Page_Validators.length; i++) {
                //Page_Validators[i].style.visibility = 'hidden';
                Page_Validators[i].enabled = false;
            }
            return false;
        }
        else 
        {
            alert('Student Name = ' + sFirstName + ' ' + sLastName);
            document.forms[0].reset();
    
            for (i = 0; i < Page_Validators.length; i++) {
                //Page_Validators[i].style.visibility = 'hidden';
                Page_Validators[i].enabled = true;
            }
            return true;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      • 2015-03-03
      • 2011-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多