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>

可能有一种更优雅的方法可以div在 jQuery 选择器中找到正确的选择器,您可以根据需要向 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 回答