C# ASP.NET服务器端验证未启动

C# ASP.NET服务器端验证未启动,c#,asp.net,.net,validation,C#,Asp.net,.net,Validation,在我的应用程序中,服务器端验证函数不起作用。甚至未调用该函数。我已经将调试器放在thuat函数上,但调试器没有停止。函数未被调用 <asp:TextBox type="text" ID="txtMobilePhone" runat="server" ClientIDMode="Static" CausesValidation="true"/> <asp:CustomValidator ID="cvMobilePhone" runa

在我的应用程序中,服务器端验证函数不起作用。甚至未调用该函数。我已经将调试器放在thuat函数上,但调试器没有停止。函数未被调用

<asp:TextBox type="text" ID="txtMobilePhone" runat="server" ClientIDMode="Static" CausesValidation="true"/>
                        <asp:CustomValidator ID="cvMobilePhone" runat="server" OnServerValidate="cvMobilePhone_ServerValidate" 
                            Text="Mobile Phone already exist in this Reward Program." ErrorMessage="Mobile Phone already exist in this Reward Program."
                            Display="Dynamic" ValidationGroup="vgStep2" ControlToValidate="txtMobilePhone" CssClass="error"></asp:CustomValidator>
                        <asp:RequiredFieldValidator ID="rfvMobilePhone" runat="server" ControlToValidate="txtMobilePhone"
                            ErrorMessage="Mobile Phone is required." CssClass="error" ValidationGroup="vgStep2"></asp:RequiredFieldValidator>
                        <asp:CustomValidator ID="cvMobilePerVal" runat="server" ClientValidationFunction="validateEmailOrMobilePerVal"
                            Display="Dynamic" ValidationGroup="vgStep2"></asp:CustomValidator>


 <asp:Button ID="btnStep2Upper" runat="server" ClientIDMode="Static" OnClick="btnSaveContactClick" Text="Save" ValidationGroup="vgStep2" vg="vgStep2" OnClientClick="return ClientValidate();" />
服务器端代码

现在,当我单击submit按钮时,所有clent端验证都在工作,但serside自定义验证程序没有调用

您忘记设置ControlToValidate属性了吗

<asp:CustomValidator ID="cvMobilePhone" runat="server" ControlToValidate="txtMobilePhone" OnServerValidate="cvMobilePhone_ServerValidate" 
                            Text="Mobile Phone already exist in this Reward Program." ErrorMessage="Mobile Phone already exist in this Reward Program."
                            Display="Dynamic" ValidationGroup="vgStep2" CssClass="error"></asp:CustomValidator>

你有两种不同的因素共同导致了这种行为

首先,请注意,尽管正如其他人所说,您不必指定ControlToValidate,但这样做会限制服务器端自定义验证事件将触发的环境。具体地说,如果不设置它,则事件总是在回发时触发,而如果设置它,则仅当ControlToValidate标识的控件具有非空值时才会触发事件

其次,通过指定OnClientClick,您告诉框架您将负责客户端验证,除非您从OnClientClick函数调用它,否则现在不会启动客户端验证。虽然您的问题中没有包含ClientValidate函数,但我怀疑您没有这样做,这使得RequiredFieldValidator无法阻止回发

结合起来,这两件事意味着

尽管文本框为空,但仍会发生回发,并且 服务器端自定义验证不会在回发时触发,因为文本框为空。 您可以使用Page_ClientValidate从自定义函数调用客户端验证,该页面将出现在页面脚本中,因为页面包含验证程序

function ClientValidate() {
    if (Page_ClientValidate()) {
        //do custom validation, maybe return false 
        return true;
    }
    else {
        return false;
    }

} 

您是否尝试删除按钮中的OnClientClick部分?你能在你的cvMobilePhone_ServerValidate方法中发布代码吗?@Iswanto San:我的服务器端验证功能甚至没有执行。它不是事件调用。我不知道为什么它没有启动。您的ClientValidate返回true还是false?它返回true。我的光标直接到达按钮单击事件。服务器端validaor函数未停止。我使用了page.validate和page.IsValid。虽然按钮事件不应该被调用,但它被调用。很抱歉,我在复制粘贴中出错了。但是我的代码中有ControlToValidate。您不需要在CustomValidator上使用ControlToValidate属性,因为所有逻辑都在ServerValidate eventHandler中,请参阅:对于除CustomValidator控件之外的所有验证控件,必须将此属性设置为输入控件的ID,有一件奇怪的事情,我发现它不在某台机器上运行,但在另一台机器上运行的是相同的代码……可能是我测试过的浏览器中禁用了javascript。JavaScript已启用。。。。实际上,它在我所有的本地机器上工作,但在现场服务机器上不工作……什么在工作?你的原始代码?或者我的建议。我的原始代码正在运行。没有控件验证
function ClientValidate() {
    if (Page_ClientValidate()) {
        //do custom validation, maybe return false 
        return true;
    }
    else {
        return false;
    }

}