1

サイトのテーブルを含むビューが必要で、テーブル アイテムをクリックすると、クリックした現在のオブジェクトで部分ビューを更新したいと考えています。どうすればこれを行うことができますか?

<table>
    @foreach (var a in annotations)
    {
        <tr>
            <td>
                <label onclick="change stuff to new Annotation">@a.Title</label>
            </td>
        </tr>
    }
</table>
<div id="stuff">@Html.RenderPartial("Go", "new annotation")"</div>
4

2 に答える 2

2

クライアント側とサーバー側のコードを混在させています。クリック イベントが発生するまでに、ユーザーはクライアント側にいて、サーバー側のコードが実行されて終了しています。

部分ビューを非表示でレンダリングdivし、クリック イベントで非表示に戻すことができます。おそらくこれに似たもの:

<table>
@foreach (var a in annotations)
{
    <tr>
        <td>
            <label>@a.Title</label>
            <div style="display:none;">@Html.RenderPartial("Go", a)</div>
        </td>
    </tr>
}
</table>

<script type="text/javascript">
    $(function () {
        $('table tr td label').click(function () {
            $(this).closest('td').find('div').show();
        });
    });
</script>

jQueryセレクターで正しいものを見つけるためのより洗練された方法があるdivかもしれません。おそらく、必要に応じてDOM要素にクラスとIDを追加して、よりクリーンにすることができます。これらのテーブル行が多数ある場合は、jQuery.on()関数を使用してクリック イベントをバインドすることもお勧めします。パフォーマンスが向上するためです。このようなもの:

<script type="text/javascript">
    $(function () {
        $('body').on('click', 'table tr td label', function () {
            $(this).closest('td').find('div').show();
        });
    });
</script>

これにより、複数のクリック イベントではなく単一のクリック イベントが DOM にバインドされ、動的に追加された行はバインドが行われた後もイベントを処理するという追加のボーナスが得られます。

于 2013-02-15T13:44:16.160 に答える
0

ここでクライアント側とサーバー側のコードを混同します。

@Html.RenderPartial("Go", a)

HTMLを返すサーバー側のメソッドです。

<label onclick=

クライアント側のコードです。したがって、クライアントがデータを取得するまでには、次のようになります。

<label onclick="The text returned from html.render partial">

ここで根本的に間違ったルートをたどっているので、あなたが望むものを達成するために、MVCについてもう少し読む必要があると思います。

于 2013-02-15T13:41:07.567 に答える