0

我有一个 asp.net 按钮,它具有单击事件,基本上将数据添加到数据库中。我还有一个单选按钮列表(即批准/拒绝)和一个文本框。如果用户选择拒绝,则文本框变为可见。我想运行验证,当用户单击提交按钮时,如果选择拒绝,则文本框不能为空。我已经为此使用了 jquery 验证。当我单击按钮时,消息会出现在文本框旁边,表明该字段是必需的,但它不会停止执行后面的代码。即它将数据添加到数据库中。这是我的代码。

<script type="text/javascript" language="javascript">



    $(function() {
        $('#declinediv').hide();
        ////////
        var $radBtn = $("table.rblist input:radio");
        $radBtn.click(function() {
            var $radChecked = $(':radio:checked');
            var value = $radChecked.val();
            if (value == 'Decline' || value == 'Approve') {
                if (value == 'Decline')
                    $('#declinediv').show();

                else
                    $('#declinediv').hide();
            }
            else {
                $('#declinediv').hide();
            }

        });
        //////////////////////////

        $("#aspnetForm").validate({
            rules: {
                <%=txtdeclinereason.UniqueID %>: {
                    minlength: 2,
                    required: true
                }
        }, messages: {
            <%=txtdeclinereason.UniqueID %>:{ 
                    required: "* Required Field *", 
                    minlength: "* Please enter atleast 2 characters *" 
                }
        }, onsubmit: true


    });

    //////////////////////////////////

    $('#btnsubmit').click(function(evt){
        var isValid = $("#aspnetForm").valid();

        if (!isValid)
        {
            evt.preventDefault();
            }
    });





});

    function myredirect(v, m, f) {
        window.location.href = v;
    }  

</script>


<table style="border: 1px black solid; text-align: center; vertical-align: middle"
    width="100%">
    <tr>
        <td>
            <asp:RadioButtonList ID="rbtnlstapprover" runat="server" RepeatDirection="Horizontal"
                CssClass="rblist" DataTextField="username" DataValueField="emailaddress">
                <asp:ListItem Text="Approve" Value="Approve" />
                <asp:ListItem Text="Decline" Value="Decline" />
            </asp:RadioButtonList>
            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="rbtnlstapprover"
                Text="*" ErrorMessage="Please select atleast one Approver" ValidationGroup="approvalgroup"
                Display="Dynamic" />
        </td>
    </tr>
    <tr>
        <td>
            <div id="declinediv">
                <asp:TextBox ID="txtdeclinereason" runat="server" TextMode="MultiLine" Columns="80"
                    Rows="5" />
             </div>
        </td>
    </tr>
    <tr>
        <td>
            <asp:Button ID="btnsubmit" runat="server" Text="Submit" CssClass="RegularButton"
                CausesValidation="true" ValidationGroup="approvalgroup" OnClick="btnsubmit_Click" />
        </td>
    </tr>
</table>

如何停止执行后面的代码?谢谢你的帮助。

编辑:

我能够通过为按钮添加 OnClientClick 事件来修复问题

if ($('#declinediv').is(':visible'))
{

     var isValid = $("#aspnetForm").valid();
     alert(isValid);

    if (isValid)
        return true;
    else
        return false;

}
else
{
    return true;
}
4

4 回答 4

3

将按钮的 OnClientClick 属性设置为您的 javascript 函数以进行验证。如果它没有验证,让你的 javascript 函数返回 false 并且页面不会回发。

<asp:Button ID="btnsubmit" runat="server" Text="Submit" CssClass="RegularButton"
                CausesValidation="true" ValidationGroup="approvalgroup" OnClick="btnsubmit_Click" OnClientClick="return(jsValidate());" />
于 2010-04-23T13:40:04.570 回答
1

OnClick不会执行后面的代码,直到OnClientClick返回true ...

如果验证为假,OnClientClick = "(return(validationfunction());"将返回并且回发将停止。

于 2014-04-30T17:08:23.027 回答
0

你确定它正在验证所有的冷杉吗?在 if 语句中放置一个“调试器”。我认为您需要使用 ClientId 而不是 UniuqueId。

于 2010-04-23T13:38:10.313 回答
0

如果验证通过,处理提交按钮的函数应该返回 true,如果验证失败,则返回 false。
我不确定那里的代码是否附加了另一个事件处理程序或替换它。如果仅附加事件处理程序并且两个事件都使用 jquery 魔法触发,则简单地返回 false 可能不起作用。

您还说记录仍在添加到数据库中。这意味着您没有服务器端验证来支持您的客户端验证。可以绕过任何 jquery 验证器,因此您应该确保在服务器上再次检查。

于 2010-04-23T13:39:52.197 回答