通过javascript重置asp.net验证控件?

Mic*_*ern 21 javascript asp.net validation reset

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

var cv= document.getElementById("<%= MyValidationContorl.ClientID %>");
cv.innerHTML = '';
Run Code Online (Sandbox Code Playgroud)

更新:

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

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>
Run Code Online (Sandbox Code Playgroud)

MK.*_*MK. 39

每次发帖时都会触发页面验证,似乎问题在于您正在清除验证器内容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>
Run Code Online (Sandbox Code Playgroud)

更新:重置验证摘要

<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>
Run Code Online (Sandbox Code Playgroud)


ker*_*rem 15

这个重置所有验证组中的所有验证器.

<script type="text/javascript">
    Page_ClientValidate('');
</script>
Run Code Online (Sandbox Code Playgroud)

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

Gle*_*lar -1

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

function CleanForm() {
    document.forms[0].reset(); 

    for (i = 0; i < Page_Validators.length; i++) {
        Page_Validators[i].style.visibility = 'hidden';
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

或单个:

document.getElementById("<%= MyValidationContorl.ClientID %>").style.visibility
 = 'hidden';
Run Code Online (Sandbox Code Playgroud)