2013-02-28 64 views
1

我剛剛開始在剃刀,我的第一個傾向是對待像.ACSX的助手。我如何(輕鬆地)在Razor中動態命名助手元素?

比方說,我做一個很簡單的幫手:

@helper HowManySpans() { 
<div> 
<input type="text" name="txtLoops" /><input type="submit" value="how many?" /> 
@{ if (IsPost) { 
    var count = Request["txtLoops"]; 
    var i = 1; 
    while (i < count) { 
     <span>Span #@i</span> 
     i++; 
     } 
    } 
</div> 
} 

它,直到我將兩個在同一頁上工作正常。我期待編譯器發出像ASPX頁面一樣前綴的元素的名稱,yknow,ctl00_Header_txtLoops或類似的東西。

我想在一個更多的參數驅動的幫手,我可以使用我的參數來自己的前綴名稱,但我覺得仍然推遲這個問題。如果我有一些動態助手將名稱與某個參數相加,我仍然只能在具有該參數的頁面上有一個助手。

我可以看到痛苦明顯的東西嗎?

回答

1

剃刀只發出頁面中的標記。它在增加標記方面很少。 Razor v2增加了條件屬性,但是這對代表開發者來說仍然有些明確。

我有一個問題是爲什麼這些元素甚至需要唯一的名稱。在許多現代HTML5應用程序中,幾乎不需要元素具有唯一的名稱。

但是,假設,有必要,有兩種方法我能想到的做到這一點:

  1. 讓主叫方傳遞一個名稱或名稱前綴(如你所說)。
  2. 創建自己的計數器,並在每次調用幫助器時遞增計數器。最大的問題是保存櫃檯信息的地方。保存它的一個合理的地方是HttpContext.Items集合,它是一個請求的「數據包」。每次調用幫助程序時,都會檢查Items包以查看當前的計數,並將其增加1,使用該數字並更新包。
+0

我明白了。我來自非MVC ASP.NET背景,不需要唯一名稱的範例對我來說並不合適。我想,因爲我從我的高級開發人員w/r/t那裏得到了基本相同的答案,爲什麼需要獨特的名稱,這是我自己的開發風格的障礙,我必須要克服。 – friggle 2013-02-28 17:53:31

+0

@friggle是的,請不要認爲它是錯誤的*有一個ID - 它根本沒有錯。這更多的是關於需求和常見做法。最後,您可以根據需要構建應用程序,並且如果應用程序具有指定元素最簡單或最好,那麼就使用它。 – Eilon 2013-02-28 18:15:52

相關問題