0

基本的にデータをデータベースに追加するクリックイベントを持つasp.netボタンがあります。また、ラジオボタンリスト (つまり、承認/拒否) とテキストボックスもあります。ユーザーが辞退を選択すると、テキストボックスが表示されます。ユーザーが送信ボタンをクリックしたときに、辞退が選択された場合、テキストボックスを空白にできないという検証を実行したいと思います。そのためにjquery検証を使用しました。ボタンをクリックすると、フィールドが必要であるというメッセージがテキストボックスの横に表示されますが、コードビハインドの実行は停止しません。ieIt はデータベースにデータを追加します。これが私のコードです。

<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 に答える
0

すべての最初を検証していると確信していますか?if 文に「デバッガ」を入れます。UniuqueId ではなく ClientId を使用する必要があると思います。

于 2010-04-23T13:38:10.313 に答える
0

送信ボタンを処理する関数は、検証に合格した場合は true を返し、検証に失敗した場合は false を返す必要があります。
そこにあるコードが別のイベント ハンドラーをアタッチするのか、それとも置き換えるのかはわかりません。イベント ハンドラーがアタッチされているだけで、両方のイベントが jquery マジックで発生する場合、false を返すだけでは機能しない場合があります。

また、レコードがまだデータベースに追加されていると言っています。これは、クライアント側の検証をバックアップするサーバー側の検証がないことを意味します。jqueryバリデーターはバイパスされる可能性があるため、サーバーで再度確認する必要があります。

于 2010-04-23T13:39:52.197 に答える