2010-02-24 67 views
3

我有點不確定何時適合使用Html.RenderAction()來渲染我的視圖,什麼時候不需要。我的理解是,因爲它不是ASP.NET MVC的「官方」組件,所以使用它是不好的做法,它的初衷是針對任何特定Controller上下文中不存在的可重用小部件。何時適合使用Html.RenderAction()?

的事情是,是的RenderAction非常有用的,當我需要的是根據不同的控制器比我目前的渲染視圖的一個存在的組件。我認爲這是一個非常整潔的方式來渲染依賴當前視圖中不可用數據的組件。我查看並不需要提供模型,因爲它會如果我用RenderPartial()

這是不好的做法?有沒有更好的辦法?

回答

4

它可以解決您的問題。

3

我認爲這是一個非常整齊的&獨立的方式來呈現依賴於當前視圖中不可用數據的組件。我的視圖不需要提供模型,因爲它會如果我使用RenderPartial()

它實際上是。例如,你可以創建一些小視圖作爲小部件,並在需要的地方注入它們。處理來自這些小部件的用戶輸入可能會變得更加複雜,但這是另一個問題。

我能想到的另一個合理場景是使用HTML電子郵件模板。當你明顯不需要將渲染輸出直接返回給瀏覽器,而是將其插入到電子郵件正文中時,就是這種情況。

2

出於您給出的原因,我使用Html.RenderAction(),因此您不必一次又一次地向需要顯示用戶信息的每個視圖提供相同的數據(例如)。你可以爭辯說,它違背了mvc模式,因爲視圖現在已經知道了控制器。但我認爲這種情況下的優勢勝過了這一點,並且您的應用程序將更加乾爽。

我只是將它用於需要在許多不同位置重用的所有內容(例如,我在母版頁上顯示的每個頁面上顯示的用戶數據),並且我不想將該信息明確地發送到每個視圖。如果我沒有弄錯,我認爲他們已經將它包含在了asp.net mvc 2中,所以它現在是框架的一部分。

1

我發現在基於父視圖模型的結果的場景中使用Html.RenderAction的一個很好的理由。例如,父視圖的模型具有必須在表中顯示的List屬性。但是,爲了防止父視圖中的條件IF/ELSE,我調用Html.RenderAction()。該行動將採取列表並檢查計數。如果計數爲零,則返回「無結果」視圖;否則,它會返回一個視圖,以自己的模型的形式處理列表中的項目。通過防止視圖中插入邏輯,這更清晰。我也可以在我的應用程序中重複使用「無結果」視圖。