0

jqueryuiダイアログ内にレンダリングされるASP.NETMVC3.0部分ビューがあります。この部分的なビューの中には、さらに情報を表示するのに役立つリンクがあります。

@foreach (StatusType status in ViewBag.Status)
{
    <li>@status.StatusMessage<a href='#' status='@status.StatusCode'><img src=@Url.Content("~/Content/Images/information.png") alt="See detail"/></a></li>
}

これらのリンクをクリックイベントにバインドしました。

$('a[status]').live('click', function (e) {
            if (e.preventDefault)
                e.preventDefault();
            else
                e.returnValue = false;
            var status = $(this).attr('status');
            alert('@Model.Code');
            ...});

何が起こっているのかというと、リンクを最初にクリックすると、正しいコード(たとえば12)が表示されます。別のコード(66)の部分ビューを再度ロードすると、2つのアラートメッセージが表示されます。最初のメッセージには12(前にクリックした古い値)が表示され、2番目のメッセージには66が表示されます。

ビューを部分的にロードするほど、アラートに含まれる値が多くなります。クリックしたすべてのコードの履歴のようになっている理由がわかりません。

誰かがこの問題について何か考えを持っているなら、それは歓迎されるでしょう、それはただ私を怒らせます。

前もって感謝します。

更新しました

ライブ作品の代わりにonを使用していますが、ダイアログに問題があります。提案されたソリューションでコードを変更しました:

            $('#StatusDiv').on('click', 'a[status]', function (e) {
            e.preventDefault();
            var status = $(this).attr('status');
            alert('@Model.Code');
            $('#StatusDialog').dialog({
                autoOpen: false,
                width: 800,
                resizable: true,
                title: 'Status Info',
                modal: true,
                open: function (event, ui) {
                    alert('@Model.Code');
                    $(this).load('@Url.Action("ViewStatusInfo")', { clientId: clientId, Code: '@Model.Code', status: status
                    });
                }
            });
            $('#StatusDialog').dialog('open');
        }); 

最初のアラートは正しいコードを表示しますが、open関数内の2番目のアラートは古いコードを表示します。2回目のクリックでは正しく機能しますが、最初の表示が正しいため、古い値を選択する方法がわかりません...

よろしくお願いします。

4

1 に答える 1

1

まず第一に:livejqueryの最後のバージョンでは使用しないでください。

$('#list').on('click', '.status', function(e){
    e.preventDefault();
    alert(this.href);
});

ここでイベントをバインドし#list、新しいリンクを挿入すると、すべてが機能します。

デモ:jsfiddle.net/wPSH2/

于 2012-09-19T08:10:28.297 に答える