c# - 比较验证器不会停止回发

标签 c# asp.net postback buttonclick comparevalidator

Below is my mark up. 

<asp:TextBox ID="txtPatientDateOfBirth" runat="server" 
    CssClass="rightDivInnerControls" ClientIDMode="Static" 
    CausesValidation="True">
</asp:TextBox>
<asp:CompareValidator ID="cvPatientDateOfBirth" runat="server" 
    ErrorMessage="Enter proper date." 
    Type="Date" ControlToValidate="txtPatientDateOfBirth" Font-Bold="True"  
    Operator="DataTypeCheck"
    ValidationGroup="FirstPreview">
</asp:CompareValidator>    

<asp:Button ID="btnSaveChanges" runat="server" 
    Text="Save Changes"  OnClientClick="return showFinalReviewAlert();" 
    CssClass="btnPrimary hideInPrint btnEditFinalReport" 
    ValidationGroup="FirstPreview" 
    onclick="btnSaveChanges_Click"  ClientIDMode="Static"/>

当我将日期更改为错误的格式时,它会立即显示错误消息

enter image description here

但是当我单击“btnSaveChanges”按钮时,它会进行回发。我认为缺少某些东西,因为它正在进行回发。

谁能帮我解决这个问题。我想如果验证失败则停止回发

谢谢。

最佳答案

通过返回 showFinalReviewAlert(); 的值在OnClientClick按钮,您将阻止页面验证的发生。

这实际上是正在呈现的 HTML(为查看而简化)...

<input type="submit" 
       id="btnSaveChanges" 
       onclick="return showFinalReviewAlert();WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;btnSaveChanges;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" 
       name="btnSaveChanges">

重要的一点是...

onclick="return showFinalReviewAlert();WebForm_DoPostBackWithOptions....

意思就是不管showFinalReviewAlert()返回,WebForm_DoPostBackWithOptions永远达不到。但是,因为它是一个 <input type="submit">无论如何,该页面都会后打包到服务器。

所以,如果showFinalReviewAlert的返回值必须通过返回值 false 来阻止回发的发生, 你应该设置 OnClientClick属性为...

OnClientClick="if(showFinalReviewAlert()==false){return false;}"

换句话说,如果showFinalReviewAlert返回 false然后停止按钮继续任何回发处理...但如果它返回 true ,然后允许进行回发验证。

另一方面,如果 showFinalReviewAlert() 的结果没关系...只需删除 return简单地给予...

OnClientClick="showFinalReviewAlert();"

关于c# - 比较验证器不会停止回发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11688399/

相关文章:

c# - 深度空检查,有没有更好的方法?

c# - TextBox 绑定(bind)到 double 并输入小于 -1 的负数时出现问题

c# - 将参数从 aspx 传递到 javascript 问题

html - 如何在特定元素上滚动,而不是整个页面?

c# - 页面上的 PostBack 后 GridView 上的 jQuery 函数停止工作(鼠标悬停,单击)

c# - 我可以通过编程方式确定 (OLEDB) 超出了哪个列长度吗?

c# - 使用 C# 打开 excel 实例

html - 如何删除 <ul> 标签和 div 之间不需要的间隙

ASP.Net 回发 get 时找不到指定的 URL

c# - ASP.Net 的自动回发。当速度太慢时会发生什么?