Asp.net mvc 3 如何将部分站点渲染到另一个div?

Asp.net mvc 3 如何将部分站点渲染到另一个div?,asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,我希望在站点上有一个带有表的视图,当您单击表项时,我希望用我刚才单击的当前对象更新部分视图。我如何做到这一点 <table> @foreach (var a in annotations) { <tr> <td> <label onclick="change stuff to new Annotation">@a.Title</label>

我希望在站点上有一个带有表的视图,当您单击表项时,我希望用我刚才单击的当前对象更新部分视图。我如何做到这一点

<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>

@foreach(注释中的var a)
{
@a、 头衔
}
@RenderPartial(“Go”,“new annotation”)“

您的客户端和服务器端代码在这里混淆了

@Html.RenderPartial("Go", a)
是一个返回一些HTML的服务器端方法

<label onclick=

您正在混合客户端代码和服务器端代码。当单击事件发生时,您已进入客户端,服务器端代码已运行并完成

您可以在隐藏的
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>

这会将一个单击事件绑定到DOM,而不是多个。另外,动态添加的行在绑定发生后仍会处理该事件。

我刚刚将示例更改为一个较新的示例。这可能可行,但我不想在创建表时一直执行@Html.RenderPartial,可能是太大了,它会消耗我的性能。有什么方法可以在我点击它的时候运行它吗?@Tartori:啊,我看到你最近改变了这个问题。这确实改变了一点,是的。稍微挖掘一下这里找到了一个很好的解决方案:它基本上使用AJAX来获取部分视图,然后将其呈现到页面上。在任何情况下,你都要必须确保服务器端和客户端代码保持干净的分离。好的,谢谢,是的,我添加了新的示例,看到我使用了一些我刚刚尝试过的东西。。。
<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>
<script type="text/javascript">
    $(function () {
        $('body').on('click', 'table tr td label', function () {
            $(this).closest('td').find('div').show();
        });
    });
</script>