2013-02-15 30 views
1

我想在网站上有一个表格,当你点击一个表格项目时,我想用我刚才点击的当前对象更新一个局部视图。我如何设法做到这一点?如何渲染部分网站到另一个div?

<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

我刚刚将示例更改为新的示例。 – Tartori 2013-02-15 13:46:32

回答

2

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

您可以在隐藏的div中渲染局部视图,并在click事件中取消隐藏它。一些与此类似,也许是:

<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一个更优雅的方式,根据需要,使之清洁可以或许添加class和id到DOM元素。如果你有很多这些表行,那么我还建议使用jQuery .on()函数来绑定点击事件,因为它会表现得更好。事情是这样的:

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

这一个单一的点击事件到DOM绑定,而不是多个,与额外的奖励动态添加的行仍然会处理事件的结合发生之后。

+0

好吧,这可能会起作用,但我不想在创建表格时始终执行@ Html.RenderPartial,这可能会很大,并且会使我的表现吃光。有没有什么方法可以在我点击它时运行它? – Tartori 2013-02-15 13:48:21

+0

@Tartori:啊,我明白你最近改变了这个问题。这确实改变了一些,是的。有点挖掘在这里找到了一个很好的解决方案:http://stackoverflow.com/questions/1570127/render-partial-view-using-jquery-in-asp-net-mvc它基本上使用AJAX获取局部视图,然后呈现它到了页面。无论哪种情况,你都必须确保你保持服务器端和客户端代码的完全分离。 – David 2013-02-15 13:50:32

+0

好的,谢谢,是的,我添加了更新的例子,只是看到我用了一些我刚刚尝试过的东西...... – Tartori 2013-02-15 13:52:38

0

您将您的客户端和服务器端代码混淆在此处。

@Html.RenderPartial("Go", a) 

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

<label onclick= 

是客户端代码。因此,通过时间你的客户得到它看起来像这样的数据:

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

我认为你需要在MVC多一点读了达到你想要的你根本在这里下去了错误的路线是什么。