关于在mvc中加载局部视图

时间:2013-09-11 08:39:33

标签: asp.net-mvc-3

我是mvc的新手。现在学习。我正在搜索各种技术来加载mvc中的局部视图,我在stackoverflow中得到了很好的一个。这里是。 如果要直接在主视图中加载局部视图,可以使用Html.Action帮助程序:

@Html.Action("Load", "Home")

或者如果您不想通过“加载”操作,请使用HtmlPartial hepler:

@Html.Partial("_LoadView")

If you want to use Ajax.ActionLink, replace your Html.ActionLink with:

@Ajax.ActionLink(
    "load partial view", 
    "Load", 
    "Home", 
    new AjaxOptions { UpdateTargetId = "result" }
)

当然,您需要在页面中包含一个显示部分的持有者:

<div id="result"></div>

另外不要忘记包括:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
在主视图中

以启用Ajax。*帮助程序。并确保在web.config中启用了不显眼的javascript(默认情况下应该是这样):

<add key="UnobtrusiveJavaScriptEnabled" value="true" />
经过上面的代码后,会出现一个混乱。帮助要求。我的困惑如下。

@Html.Action("Load", "Home")
@Html.Partial("_LoadView")

我知道使用@Html.Partial("_LoadView"),但不明白@ Html.Action(“加载”,“主页”)将如何运作?

任何人都可以向我展示几个例子来展示

的各种用法
@Html.Action("Load", "Home")

以及它与@Html.Partial("_LoadView")

的区别

感谢

2 个答案:

答案 0 :(得分:2)

Html.Partial

  1. 将部分视图渲染为HTML编码的字符串。
  2. 此方法结果可以存储在变量中,因为它返回字符串类型值。
  3. 使用简单,无需创建任何操作。
  4. 当部分视图中的显示数据已经存在于相应的视图模型中时,使用部分方法很有用。例如:在博客中显示文章的评论,我们想使用RenderPartial方法,因为文章带有注释的信息已填充在视图模型中。

    @Html.Partial("_Comments")

  5. Html.Action

    1. 将部分视图渲染为HtmlString。
    2. 对于此方法,我们需要为渲染局部视图创建子操作。
    3. 此方法结果可以存储在变量中,因为它返回字符串类型值。
    4. 当局部视图中的显示数据独立于相应的视图模型时,动作方法很有用。例如:在每个页面上显示类别列表的博客中,我们希望使用Action方法,因为类别列表由不同的模型填充。

      @{Html.Action("Category","Home");}

答案 1 :(得分:1)

@Html.Action("Load", "Home")

将在“HomeController”中执行“加载”ActionResult。 此操作可能会返回任何这些(参考:MSDN):

  • ContentResult类型
  • EmptyResult
  • FileResult
  • HttpUnauthorizedResult
  • JavaScriptResult
  • JsonResult
  • RedirectResult
  • RedirectToRouteResult
  • ViewResultBase

虽然

@Html.Partial("_LoadView")

将部分视图“_LoadView”插入当前视图。

如果您熟悉网络表单,请将部分视图视为.ascx(用户控件)。

编辑:

@Html.Action()的使用示例:

说你有这个观点:

<p>Here is my name: @Html.Action("Name")</p>

这是我的控制器(如你所见,我使用隐式使用你被路由到的控制器的Html.Action()的重载):

public class FooController : Controller
{
    //
    // GET: /Foo/

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

   // GET: /Foo/Name

    public ActionResult Name()
    {
       return Content("Annish");
    }
}