2012-08-01 64 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()方法如果您有一个部分视图与一个模型,但不同的数据。