Javascript验证会覆盖ASP.NET验证程序

时间:2011-10-18 14:52:32

标签: javascript asp.net validation overwrite

我有一个让我发疯的问题。在我的页面上,我有一个 Javascript验证和两个 ASP.NET验证器。验证结果仅取决于Javascript的结果。这意味着如果Javascript返回 true ,则不会检查ASP.NET验证程序。

Javascript 代码为:

<script type="text/javascript">

    function Validate() {
        var ddlObj = document.getElementById('<%=ddStatus.ClientID%>');
        var txtObj = document.getElementById('<%=txtComment.ClientID%>');
        if (ddlObj.selectedIndex != 0) {
            if (txtObj.value == "") {
                alert("Any change of Status requires a comment!");
                txtObj.focus();
                return false;
            }
        }
    }
</script>

相反,两个 ASP.NET验证程序是:

<td><asp:TextBox runat="server" ID="txtSerialNr" ></asp:TextBox>
<asp:RequiredFieldValidator runat="server" ID="RequiredFieldValidator1" ControlToValidate="txtSerialNr" ErrorMessage="***" />
                        </td>

<td><asp:TextBox runat="server" ID="txtProdName" ></asp:TextBox>
<asp:RequiredFieldValidator runat="server" ID="rfv1" ControlToValidate="txtProdName" ErrorMessage="***"></asp:RequiredFieldValidator></td>

有人可以帮忙吗?感谢

更新:

我从按钮调用Javascript:

    <asp:Button runat="server" ID="btnSubmit" Text="Save New Product" 
style="cursor:hand" OnClick="btnSubmit_Click" />

但是我从代码隐藏

注册属性
protected void Page_Load(object sender, EventArgs e)
{
    btnSubmit.Attributes.Add("OnClientClick", "return Validate()");
}

2 个答案:

答案 0 :(得分:1)

好的,这里有一些问题。

如果您足够关注验证,除了客户端之外,您还必须始终进行服务器端验证。客户端验证非常用户友好且响应速度快,但只需将JavaScript设置为“关闭”即可绕过它!

我没有看到你告诉你的控件哪些JavaScript函数在验证时要调用?您使用不需要外部函数的RequiredFieldValidators - 然后使用Validate()函数尝试自定义验证。

如果你最终使用CustomValidator,那么你需要更改你的功能的'签名'。它必须是

的形式
   function validateIt(sender, args){
            var testResult = //your validation test here
            args.IsValid = testResult;
        }

答案 1 :(得分:1)

您可以在Validate()函数中激活客户端验证:

validate = function(){
    bool isValid = Page_ClientValidate(""); //triggers validation
    if (isValid){
        var ddlObj = document.getElementById("<%=ddStatus.ClientID%>"); 
        var txtObj = document.getElementById("<%=txtComment.ClientID%>"); 
        if (ddlObj.selectedIndex != 0) { 
            if (txtObj.value == "") { 
                alert("Any change of Status requires a comment!"); 
                txtObj.focus(); 
                isValid = false; 
            } 
        } 
    }
    return isValid;
}

标记:

<asp:Button runat="server" OnClientClick="return validate();" ... />