我想要一个带有网站表格的视图,当你点击一个表项时,我想用我刚刚点击的当前对象更新一个局部视图。我该如何设法做到这一点?
<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>
答案 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来实现你想要的东西,因为你在这里从根本上走错了路。