2
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"/>

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

在此处输入图像描述

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

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

谢谢。

4

5 回答 5

2

实际上,这些 ASP.NET 验证器的工作方式(在此处描述:Validating User Input in ASP.NET Web Pages)与您所期望的有点不同 - 它应该是回发的。从链接的 MSDN 文档:

当用户向服务器提交页面时,将调用验证控件以逐个控件检查用户输入。如果在任何输入控件中检测到验证错误,则页面本身将设置为无效状态,以便您可以在代码运行之前测试其有效性。

强调我的。当他们说“将页面设置为无效状态”时,他们指的是Page.IsValid属性。因此,当您运行服务器端代码时,您需要将其包装在一个块中,如下所示:

if(Page.IsValid)
{
    // Run code now that validation has been verified.
}

为了完全防止回发,您只需要使用 JavaScript(客户端代码)来禁用提交按钮,直到所有控件都处于有效状态。

于 2012-07-27T13:36:52.150 回答
2

通过返回按钮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;}"

换句话说,如果showFinalReviewAlertreturnfalse则停止按钮继续任何回发处理......但如果它 return true,则允许回发验证发生。

另一方面,如果结果showFinalReviewAlert()无关紧要...只需删除return即可简单地给出...

OnClientClick="showFinalReviewAlert();"
于 2012-07-27T13:50:37.040 回答
2

在您的服务器控件 asp:button 中添加 OnClientClick 和 Onclick 事件,

asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_OnClick" OnClientClick ="if(validateTotal()==false){return false;}"

如果函数 OnClientClick 事件将返回 false,则它不会回发。

你的 validateTotal() 可能是这样的,

function validateTotal() 
{
    if (parseInt($('.lblTotal').text().trim()) > 100) {
        alert("Please check total value, it should not be more than 100%");
        return false;
    }
}
于 2014-10-16T17:36:02.210 回答
1

ValidationGroupTextBox控件中丢失了。

<asp:TextBox ID="txtPatientDateOfBirth" runat="server" 
    CssClass="rightDivInnerControls" ClientIDMode="Static" 
    CausesValidation="True"
    ValidationGroup="FirstPreview">
</asp:TextBox>
于 2016-02-17T06:45:35.943 回答
0

这是因为您使用过:

OnClientClick="return showFinalReviewAlert();"

你在做什么showFinalReviewAlert();"

你可以在里面做showFinalReviewAlert();"的是添加 return false将停止页面的回发。

<script language="javascript">
    function showFinalReviewAlert() {
        //
        //   Your coding stuffs...
        //
        return false;
    }
</script>
于 2012-07-27T13:36:41.063 回答