2011-11-16 58 views
1

有在ASP.NET MVC中創建自定義HTML輔助的方法有兩種:什麼時候應該將HTML助手作爲擴展方法而不是簡單的靜態方法編寫?

  1. 您可以創建與輸出HTML靜態方法的類,或
  2. 您可以添加一個擴展方法爲HtmlHelper類。

選項#1看起來更簡單,更容易。

  • 選項2的優點是什麼?
  • 我什麼時候想要這樣做而不是選項#1?
  • 選項#2是否爲您提供任何好處或附加功能?

編輯補充:

在這種特定情況下,我想輸出我們通過一個一堆條件邏輯形成的字符串。把它放在我的模型中似乎是錯誤的,但是在剃刀中全部使用它似乎是單調乏味和不必要的 - 或者我錯了嗎?

+0

還有第三個選項,我會推薦你​​:使用ViewModels和Display \ Editor模板。這樣你就不會打破模式。所有HTML都保留在視圖中,無需通過擴展和/或靜態方法編寫代碼。 – Joao

+0

請查看[this](http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-1-introduction.html)以獲得更多關於如何操作的信息。這是做你即將做的事情的正確方法。 – Joao

回答

0

談論@helper語法在我們目前的項目一開始我們做大量的HtmlHelper擴展,但我們意識到,這僅僅是錯誤的做法,主要是因爲:

  • 它打破了這種模式,因爲您在視圖外部通過C#代碼編寫HTML。
  • 這不是驗證友好的!

因此,我們只是拋出幾乎所有的幫手,我們已經實現了所有控制器的ViewModels和模板。這是做這件事的正確方法。

這是最好的地方開始:ASP.NET MVC 2 Templates, Part 1: Introduction

底線,如果你通過代碼構建HTML,什麼是錯在項目的邏輯/模式。

+0

我明白你爲什麼說HTMLHelpers是壞的......但看過在Templates中,我不明白他們在這種特殊情況下能夠如何幫助我,我試圖輸出一個通過一系列條件邏輯創建的字符串(帶有一些HTML)。也許我誤解了? – sangfroid

+0

該邏輯的位置在控制器中。在視圖中,您只需傳遞需要很少或(理想情況下)沒有任何邏輯的數據。忘記ViewBag \ ViewData。將所有數據傳遞給通過ViewModel查看並通過DisplayTemplates顯示。相信我,你會長期感謝。 – Joao

+0

有趣!我沒有想過將字符串構建邏輯放入控制器中。我想我會給出一個結果,看看結果如何。謝謝! – sangfroid

0

我發現選項2更清潔,可以編寫HTML,因爲它與C#代碼是分開的。在實際的剃鬚刀視圖中,你應該把你的HTML。

這是假設你是在剃刀

+0

我不確定我們在討論同樣的事情。我見過的所有例子都是這樣的: <%= Html.MethodName(「arg1」,「arg2」)%> – sangfroid

相關問題