簡體   English   中英

ASP.NET MVC:何時使用自定義HTML幫助程序方法vs Html.RenderAction?

[英]ASP.NET MVC: When to use custom HTML helper methods vs Html.RenderAction?

關於何時使用自定義輔助方法以及何時使用RenderAction以及何時簡單地使用ViewData,我有點不清楚。 它們的一些功能略有重疊。

例如,如果我要創建一個類別導航欄,我是否會創建一個新的輔助方法並將其放在某個局部視圖中? 我最初雖然這樣做,但我在一些博客上讀到使用RenderAction代替。 我一直在思考,並且可以使用一些幫助而不僅僅是這個例子,但總的來說。

假設類別列表來自某些數據源。

我遵循的一般准則是:

HtmlHelper方法:

  1. 用於標准化標記。 我使用幫助程序來確保我的表單字段,輸入按鈕和圖像標記使用一致的標記。
  2. 在生成的標記最小時使用。 少量文本,表單字段標記等。我不使用幫助器來呈現完整的域對象。
  3. 操作少量離散參數。 如果我需要迭代一個集合並顯示一些東西,那就是部分的。 如果我需要大量的輸入,那也是一個部分。
  4. 不包含任何業務邏輯,只包含表示邏輯。 參數通常是解決方案域中的對象,而不是業務/問題域。
  5. 通常非常通用,適用於大部分應用程序。

渲染部分:

  1. 當我想將大視圖分解成更小的片段時使用。 該模型應該是“主”視圖模型的子集。
  2. 部分視圖通常僅由某些控制器或區域使用。

渲染動作:

  1. 當我想創建可以以各種方式組合的小塊功能時使用。
  2. 最常用於生成適用於許多控制器或區域的內容,例如導航控件。

ViewData的:

我將使用ViewData來跟蹤適用於所有視圖的全局數據,例如當前用戶。 如果我需要一種顯示此數據的一致方法,我通常會為它創建一個部分,然后在母版頁中執行RenderPartial()。

首先,這可能很清楚,但是我們可以這樣說:類別業務邏輯(例如,從數據源獲取數據)不應該在Html幫助程序中或在用戶控件中:它應該在控制器中完成。

1)RenderPartial / HtmlHelper與2)RenderAction之間的區別在於該業務邏輯在哪個控制器中:

  1. 在一個控制器動作中執行整個頁面或
  2. 在特定於部分視圖的單獨控制器操作中。

如果您在幾乎每個頁面中使用類別數據,我認為在頁面控制器操作級別上為每個頁面獲取它並不是錯誤的,並將其傳遞給視圖數據。 當然你會使用一些機制(自定義模型基類,擴展控制器......),這樣你就不會在每個動作中都有相同的類別獲取函數調用(假設你有很多)。

如果某些頁面視圖選擇顯示類別,有些不是,有些可能有另一個具有不同業務邏輯的類別控件,那么RenderAction肯定更好。 即使在上述情況下,RenderAction也很好:它將類別提取與控制器操作中的其他數據分開。

然后是否使用RenderPartial或HtmlHelper ......對我而言,HtmlHelpers應該更通用,而不是特定於特定視圖或模型,但我認為,這比MVC視角中的明確規則更具品味:兩者都應該只是View-邏輯。

當場景滿足以下條件時,我會選擇html輔助方法:

  1. 參數不被視為模型數據
  2. 它不必生成過多的標記
  3. 可以使用給定的參數生成html

如果你有一個使用模型數據的html輔助方法,或者它有很多依賴項,那么它可能更適合作為RenderPartial或RenderAction。

我也是使用RenderAction的新手

但是當我需要為特定的顯示器加載數據時,我現在使用RenderAction

非常適合加載標簽雲,標簽雲顯示在每個頁面上,但數據並非特定於頁面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM