2012-10-18 23 views
0

例如我有這種剃刀視圖了Serverside HTML呈現和客戶端結合戰略性,以避免重複

@foreach (var item in Model) 
{    

    <a href="@Item.Id">Hello world</a> 
} 

並且在客戶端上我有用於結合數據這個小模板。

var target = target.find("tbody"); 
    var markup = "<a href='${Id}'>Hello world<a>"; 

    $.template("tmpl", markup); 
    var elm = $.tmpl("data", data); 

此視圖包含ASP.NET Razor語法。但是我經常會遇到這樣一種場景:相同的視圖模型可能會被AJAX請求所困擾,並通過一些基於Javascript的模板綁定到DOM,如Knockout或jQuert模板,CanJS或其他。

我不太願意重複自己,因爲我必須這樣做。那麼你的戰略是什麼?我不認爲這是一個選擇只使用客戶端,因爲它會影響我的搜索引擎優化。

回答

0

那麼你可以使整個可重複的(@foreach)部分成爲局部視圖,這樣控制器在通過ajax調用時只需要渲染的局部視圖並將其推入頁面。

你可以告訴你的ajax調用返回的預期內容類型是html。

所以在你的控制器動作或阿賈克斯曾經你要如何仔細分解不同的動作:

if(Request.IsAjaxRequest()) return Partial('myForeach',model); 

這解決方案使零重複。 ajax調用獲取完全呈現的html,這將是@foreach所在的位置。

這將是最直接的確保機器人只會看到一個正確呈現的頁面。 (這裏假設你關心的機器人不會試圖找出頁面看起來像是javascript後調整)。