クライアント側とサーバー側のコードを混在させています。クリック イベントが発生するまでに、ユーザーはクライアント側にいて、サーバー側のコードが実行されて終了しています。
部分ビューを非表示でレンダリング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 にバインドされ、動的に追加された行はバインドが行われた後もイベントを処理するという追加のボーナスが得られます。