0

この問題は私を悩ませてきました。なぜこれが役立つのかについての説明は役に立ちます。

次の DOM があるとします。

<body>
<form id="form1" runat="server">

    <div id="myDiv" runat="server" data-type="Monkey">
        Choose your inner animal!
        <ul>
            <li class="selected">Monkey</li>
            <li>Tiger</li>
            <li>Dog</li>
            <li>Bunny</li>
        </ul>
    </div>

    <asp:Button runat="server" ID="btnSubmit" Text="Submit" />

</form>
</body>
<script src="Assets/js/jquery-1.9.0.min.js" type="text/javascript"></script>
<script>
$(document).ready(function () {

    $('li').bind('click', function () {
        $('li.selected').removeClass('selected');
        var animal = $(this).addClass('selected').text();

        //$('#myDiv').data('type', animal);
        $('#myDiv').attr('data-type', animal);
    });

});
</script>

コードビハインド:

Partial Class _Default
Inherits System.Web.UI.Page

Protected Sub btnSubmit_Click(sender As Object, e As System.EventArgs) Handles btnSubmit.Click
    Dim type As String = myDiv.Attributes("data-type")

    MsgBox(type)
End Sub
End Class

MsgBoxは常にデフォルト値の「Monkey」で返されます。ここで、非表示フィールドに値を保存し、ボタンのクリック時に値を呼び出すという回避策を実装しましたが、それは機能します。更新パネルを試してみましたが、うまくいきませんでしたが、更新パネルが嫌いで、とにかく使用したことがないので、それは問題ではありません。

4

3 に答える 3

2

これは、HTML とポストバックの方法の制限です。私の知る限り、これは ASP.NET の制限ではありません。それを超えています。

特定のタグのみが値をサーバーにポストバックします。私が考えていないものがあるかもしれませんが、それは単なる INPUT タグと SELECT タグだと思っています。

タグ内の属性はポストバックさえされません: 値だけです。

したがって、SELECT で選択された内容または INPUT の値でない限り、サーバーはクライアントで変更された内容について何も知りません。ASP.NET のすべて、ViewState およびポストバック データから再構築されるすべてのものは、これらのタグに基づいています。

したがって、隠しフィールドは、あなたが望むことを実現できる唯一の方法です。

于 2013-02-26T18:30:03.627 に答える
0

SELECT の場合、"disabled" 属性が JQuery で true に設定されている場合、ASP .Net コード ビハインドでは正しい値を取得できませんが、代わりに、リストの最初の項目が selecteditem として取得され、対応しています。選択値としての値。INPUTも同様です。

最も簡単なオプションは、隠しフィールドを使用し、それらを JQuery に入力し、それらの値をコード ビハインドで使用することだと思います。

于 2013-04-09T17:04:53.257 に答える