C# 当客户端验证失败时,防止模式对话框在提交时关闭

C# 当客户端验证失败时,防止模式对话框在提交时关闭,c#,asp.net,C#,Asp.net,我在页面上有一个提交按钮,单击该按钮后,会显示一个模式弹出窗口。此模式弹出窗口包含一个复选框,必须选中该复选框才能单击模式的“确定”按钮: <script language="javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <script language="javascript" type="text/javascript"&

我在页面上有一个提交按钮,单击该按钮后,会显示一个模式弹出窗口。此模式弹出窗口包含一个复选框,必须选中该复选框才能单击模式的“确定”按钮:

<script language="javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

<script language="javascript" type="text/javascript">
function cvcbCertify_ClientValidate(sender, e) {
    var elem = document.getElementById('<%= cbCertify.ClientID %>');
    if (elem.checked)
        e.IsValid = true;
    else {
        $('.pnlConfirm').show();  //not working?
        e.IsValid = false;

    }
}

函数CVCBCertificate\u ClientValidate(发送方,e){
var elem=document.getElementById(“”);
如果(元素已选中)
e、 IsValid=true;
否则{
$('.pnlConfirm').show();//不工作?
e、 IsValid=false;
}
}


此处弹出文本

必修的。

问题是当验证失败时,模式窗口关闭。如何防止此窗口关闭或重新显示此窗口?

唯一的方法是使用
UpdatePanel
。此外,这将允许您将
AsyncPostBackTrigger
与条件
UpdateMode
一起使用,并与控制事件一起使用

比如说

<asp:Panel runat="server" ID="pnlConfirm" Style="display: none; background-color: White;
        border: solid 1px Gray; width: 90%; height: 100%; padding: 10px" CssClass="pnlConfirm">
    <asp:UpdatePanel ID="upItem" runat="server">
        <ContentTemplate>
                popup text here
            <asp:CheckBox runat="server" ID="cbCertify" Text="I Certify" CssClass="cbCertify">
            </asp:CheckBox>
            <br />
            <asp:CustomValidator runat="server" ID="cvcbCertify" ClientValidationFunction="cvcbCertify_ClientValidate">Required.</asp:CustomValidator>
            <br />
            <div style="text-align: center">
                <asp:Button runat="server" ID="btnConfirmCertify" Text="OK" />
                <asp:Button runat="server" ID="btnCancel" Text="Cancel" />
            </div>
        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Panel>

此处弹出文本

必修的。

解决方案是摆脱ConfirmButtonExtender并进行我自己的验证:

  function Validate_Click() {

    //using asp.net checkbox so have to go this route to get bool
    var checked = $('#<%= cbCertify.ClientID %>').is(':checked');

    if (checked) {
        $('.lblConfirmCertifyError').hide();
        return true;
    }
    else {
        $('.lblConfirmCertifyError').show();
        return false;
    }
}
函数验证\u单击(){
//使用asp.net复选框,因此必须按此路线获取bool
var checked=$('#')。是(':checked');
如果(选中){
$('.lblConfirmCertifyError').hide();
返回true;
}
否则{
$('.lblConfirmCertifyError').show();
返回false;
}
}


此处弹出文本



为什么不禁用“确定”按钮,直到选中复选框?无法使用更新面板实现此功能,但找到了我发布的另一个解决方案
  function Validate_Click() {

    //using asp.net checkbox so have to go this route to get bool
    var checked = $('#<%= cbCertify.ClientID %>').is(':checked');

    if (checked) {
        $('.lblConfirmCertifyError').hide();
        return true;
    }
    else {
        $('.lblConfirmCertifyError').show();
        return false;
    }
}
<asp:Panel runat="server" ID="pnlConfirm" Style="display: none; background-color: White;
        border: solid 1px Gray; width: 90%; height: 100%; padding: 10px">
        popup text here
        <asp:CheckBox runat="server" ID="cbCertify" Text="I Certify" CssClass="cbCertify">
        </asp:CheckBox>
        <br />
        <asp:Label runat="server" ID="lblConfirmCertifyError" Text="Required." ForeColor="Red"
            Style="display: none" CssClass="lblConfirmCertifyError"></asp:Label>
        <br />
        <div style="text-align: center">
            <asp:Button runat="server" ID="btnConfirmCertify" Text="OK" CssClass="btnConfirmCertify" OnClientClick="return Validate_Click()" />
            <asp:Button runat="server" ID="btnCancel" Text="Cancel" />
            <asp:Button runat="server" ID="btnDummy" Text="" Style="display: none" />
        </div>
    </asp:Panel>