C# 比较验证器不';不要停止回发 下面是我的分数。

C# 比较验证器不';不要停止回发 下面是我的分数。,c#,asp.net,postback,buttonclick,comparevalidator,C#,Asp.net,Postback,Buttonclick,Comparevalidator,当我将日期更改为错误格式时,会立即显示错误消息 但当我点击“btnSaveChanges”按钮时,它会进行回发。我认为缺少了一些东西,因为它正在进行回发 谁能帮我解决这个问题。如果验证失败,我想停止回发 谢谢。这是因为您使用了: Below is my mark up. <asp:TextBox ID="txtPatientDateOfBirth" runat="server" CssClass="rightDivInnerControls" ClientIDMode="S

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

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

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


谢谢。

这是因为您使用了:

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"/>
您在
showFinalReviewAlert()中的操作;“

showFinalReviewAlert();“
中可以执行的操作是添加
returnfalse
,这将停止页面的回发

OnClientClick="return showFinalReviewAlert();"

函数showFinalReviewAlert(){
//
//你的编码材料。。。
//
返回false;
}

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

当用户向服务器提交页面时,验证控制 调用以逐个控件检查用户输入。如果 在页面的任何输入控件中检测到验证错误 它本身设置为无效状态,因此您可以在 您的代码正在运行。

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

<script language="javascript">
    function showFinalReviewAlert() {
        //
        //   Your coding stuffs...
        //
        return false;
    }
</script>

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

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

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

这意味着,无论
showFinalReviewAlert()
返回什么,都将无法访问
WebForm\u DoPostBackWithOptions
。但是,由于它是一个
,因此页面无论如何都会将包发布到服务器

因此,如果
showFinalReviewAlert
的返回值必须通过返回值
false
来阻止回发,则应将
OnClientClick
属性设置为如下

onclick="return showFinalReviewAlert();WebForm_DoPostBackWithOptions....
换句话说,如果
showFinalReviewAlert
return
false
,则停止按钮继续任何回发处理。。。但如果返回
true
,则允许进行回发验证

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

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

在服务器控件asp:按钮中添加OnClientClick和Onclick事件

asp:ButtonID=“btnSave”runat=“server”Text=“Save”OnClick=“btnSave\u OnClick”OnClientClick=“if(validateTotal()==false){return false;}”

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

您的validateTotal()可能是这样的

OnClientClick="showFinalReviewAlert();"

您在
文本框
控件中缺少
ValidationGroup

function validateTotal() 
{
    if (parseInt($('.lblTotal').text().trim()) > 100) {
        alert("Please check total value, it should not be more than 100%");
        return false;
    }
}


输入CausesValidation=“True”button@WaqarJanjua默认情况下为true,因此这可能不是这里的解决方案。@jadarnel27是。但是我在msdn上看到了下面的帖子,所以我请他试着让你从
showFinalReviewAlert
返回
true
?因为我猜您正在覆盖验证器停止按钮的功能,单击尝试删除onclientclickt在showFinalRevieware()中有很多客户端内容。无法删除此内容:(感谢您的时间。我得到了答案。我需要有条件地从showFinalReviewAlert()返回true/false。@VishalSuthar OP说“我认为缺少某些内容,因为它正在进行回发。”我回答的似乎是困惑的根源——对ASP.NET验证程序控件如何工作的误解。@jadarnel27这解决了将我带到这一页的问题,为此我为您鼓掌,先生。您将我从已经非常震惊的事情中解救出来,并帮助我完成了一个已经过期的项目d今天…@realto 619很高兴我能帮上忙!好消息@Rain,很高兴能帮上忙:-)祝你余下的项目好运!
OnClientClick="showFinalReviewAlert();"
function validateTotal() 
{
    if (parseInt($('.lblTotal').text().trim()) > 100) {
        alert("Please check total value, it should not be more than 100%");
        return false;
    }
}
<asp:TextBox ID="txtPatientDateOfBirth" runat="server" 
    CssClass="rightDivInnerControls" ClientIDMode="Static" 
    CausesValidation="True"
    ValidationGroup="FirstPreview">
</asp:TextBox>