2011-06-24 24 views
1

我想使用RAZOR在MVC .NET中創建可重用的ajax控件。MVC中的聲明式AJAX「Controls」

我的例子是一個簡單的ajax文本框,並列出用戶通過在文本框中輸入來過濾列表的位置。在第一次打電話時,我會使用剃刀視圖呈現文本框和列表。在隨後的AJAX調用中,我只想渲染(現在過濾)列表。

想法1:使用@if語句來有條件地呈現代碼。

問題:剃刀似乎不喜歡有條件的HTML。例如,當<div>標籤沒有被關閉</div>時出錯。

想法2:使用@section標記創建我的控件的部分,然後根據需要在同一個文件中調用RenderSection

問題:剃刀不允許RenderSection調用部分在同一頁面

我知道我可以有條件地呈現HTML作爲字符串,但我想採取剃刀標記的易讀性的優勢,並保持與發展協議。

回答

1

您應該能夠通過將<div>標籤包圍在<text>中,將標籤輸出到沒有相應</div>標籤的Razor塊中。其原因是,剃刀使用結束標記知道何時拖回到代碼解析模式:

@if (myCondition) 
{ 
    <text> 
     <div> 
    </text> 
} 

對於Section的東西,你也許可以達到你想要使用Templated Razor Delegates什麼,就像這樣:

@{ 
Func<dynamic, object> b = @<strong>@item</strong>; 
} 

// ... 

<span>This sentence is @b("In Bold").</span> 

請參閱Phil Haack's blog瞭解更多。