我越來越多地發現我的ASP.NET MVC視圖需要一些邏輯來執行佈局的情況。這些例程沒有位於我的模型或我的控制器中。我有3個選項:什麼時候應該使用HtmlHelper擴展方法?
- 在視圖中寫入很多<%%>。
- 在很多局部視圖中少寫出<%%>。
- 編寫一個HtmlHelper擴展方法。
這是混淆了我最後的選擇。如果邏輯只針對一個視圖,可以這樣做嗎?該擴展將對所有其他視圖的Html對象「可見」,並且永遠不會被需要。
有什麼建議嗎?
我越來越多地發現我的ASP.NET MVC視圖需要一些邏輯來執行佈局的情況。這些例程沒有位於我的模型或我的控制器中。我有3個選項:什麼時候應該使用HtmlHelper擴展方法?
這是混淆了我最後的選擇。如果邏輯只針對一個視圖,可以這樣做嗎?該擴展將對所有其他視圖的Html對象「可見」,並且永遠不會被需要。
有什麼建議嗎?
我個人比較喜歡選擇3(「寫一個擴展的HtmlHelper方法」),因爲這些代碼機構借給自己很容易單元測試。
我真的希望擴展方法可以被放置在內部或嵌套類,因爲你是對的,你將開始與萬噸擴展方法,僅僅在一個視圖中使用污染您的命名空間。
我建議在自定義名稱空間的每個視圖中靜態類中固定這些HtmlHelper擴展方法,您在View中手動引用以限制整個項目中可用的擴展方法的數量。
我想,一般,同時限制部分意見和擴展方法,可重用的組件,但我不迂腐了。如果您認爲任何一種方法都可以提高代碼的可讀性,那麼請繼續使用它們。您可能需要考慮一個單獨的命名空間/助手類,它只用於一組視圖的輔助方法 - 有點像每個控制器分隔您的部分。
您可能還需要考慮使用更多的空白(即使它的silent killer)以提高可讀性。我在我的基本控制器中實現了輸出壓縮,以限制空白對下載時間的影響。
如果邏輯 只針對一個視圖,可以這樣做嗎?
是的。閱讀...
的 擴展將是「看得見」的每一個其他視圖的 HTML對象,並 它永遠不會被需要。
沒有真正的。它依賴於如何註冊視圖的擴展方法。僅當您將名稱空間添加到web.config 名稱空間部分時纔會出現這種情況。
如果你想使用一個單一的視圖擴展方法只需要導入其命名空間的單一視圖:
<%@ Import Namespace="NamespaceOf.Your.ExtensionMethods.ForThisViewOnly"%>
但不會與的HtmlHelper工作,因爲所有的擴展方法必須是相同的命名空間的一部分。 – 2009-11-13 07:11:44
它會。只需在單個頁面上導入想要使用的命名空間。 – 2009-11-13 07:55:56
不是如果我擴展方法添加到HtmlHelper雖然。爲了工作,所有人必須與HtmlHelper存在於相同的命名空間中。 「 – 2009-11-13 23:24:25