2012-08-01 47 views

回答

107

這裏是什麼,我認爲使用Html.Action或Html.Partial

Html.Partial

  1. 使用Html.Partial當你渲染靜態內容或我的經驗指導,
  2. 如果您將要傳遞正在發送到主視圖的ViewModel的數據

Html.Action

  1. 使用Html.Action當你真正需要從服務器獲取額外的數據來填充局部視圖

基本上,如果是靜態的,使用Html.Partial()。如果是動態的,與模型無關的數據,請使用Html.Action()。可能會有更多的場景,但這會給你一個很好的想法,告訴你去哪裏/如何去。對於上述類似命名的功能,Html.RenderPartial()Html.RenderAction()是可互換的。

+0

謝謝HTML.Action爲我做了詭計。 – 2013-04-22 18:43:06

+0

很好的解釋爲你+1。 – Pamma 2013-11-05 19:45:02

+0

注意,如果應用程序通過控制器有多個週期,它可以使得稍微更難以推斷給定操作發生的情況,因爲Html.Action()返回到 - 可能不同的控制器。根據您的實現/依賴關係,這也可能很昂貴,並且[filters](http://msdn.microsoft.com/zh-cn/library/gg416513(vs.98).aspx)可能是一些替代方案案例。 – Cornelius 2014-08-21 16:44:45

61

Html.Partial:渲染一個局部視圖而不是先觸發控制器動作。請參閱:Partial Views

Html.Action,呼叫控制器動作,這可能會返回一個視圖/局部視圖(也可能不會,這可能會引發HttpNotFound或返回JSON或其他東西)。

您的菜單是否需要視圖模型,還是靜態的?

如果它是一個靜態菜單,Html.Partial將符合您的需求。將靜態菜單內容放在部分視圖中,並在要渲染的位置調用Html.Partial

如果正在生成菜單關閉視圖模型,你可以使用要麼Html.PartialHtml.Action

鏈接使用Html.Partial視圖模型:

public class MenuViewModel { 
    // menu data goes here 
} 

public class GeneralViewModel : MenuViewModel { 
    // general view info goes here 
} 

public ActionResult Index() { 
    return View(new GeneralViewModel()); 
} 

// View Code 
@model GeneralViewModel 
<div>@Html.Partial("_partialName", model)</div> 

下面我們通過視圖和視圖的完整視圖模型將調用Partial並將其模型切換到局部視圖。

**分離使用Html.Action模型:**

public ActionResult Index() { 
    return View(new GeneralViewModel()); 
} 

public ActionResult MenuView() { 
    return PartialView(new MenuViewModel()); 
} 

// View Code 
@model GeneralViewModel 
<div>@Html.Action("MenuView")</div> 

這裏視圖調用控制器動作MenuView它創建一個新的視圖模型,並將其傳遞至所述部分。

0

案例1:如果您對不同的模型使用不同的局部視圖,請使用@Html.Partial()方法。

案例2:使用@Html.Action()方法如果您有一個部分視圖與一個模型,但不同的數據。