如何将部分网站呈现给另一个div?

时间:2013-02-15 13:37:09

标签: asp.net-mvc-3 razor

我想要一个带有网站表格的视图,当你点击一个表项时,我想用我刚刚点击的当前对象更新一个局部视图。我该如何设法做到这一点?

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

2 个答案:

答案 0 :(得分:2)

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

您可以在隐藏的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()函数来绑定click事件,因为它会表现得更好。像这样:

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

这会将单击事件绑定到DOM而不是很多,并且在绑定发生后,动态添加的行仍会处理事件,这会增加额外的好处。

答案 1 :(得分:0)

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

@Html.RenderPartial("Go", a)

是一个返回一些HTML的服务器端方法。

<label onclick=

是客户端代码。因此,当您的客户端获取数据时,它看起来像这样:

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

我认为你需要更多地阅读MVC来实现你想要的东西,因为你在这里从根本上走错了路。