2013-02-15 65 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多一點讀了達到你想要的你根本在這裏下去了錯誤的路線是什麼。