zoukankan      html  css  js  c++  java
  • 【转】Html.RenderPartial与 Html.RenderAction的区别

    Html.RenderPartial与Html.RenderAction 这个两个方法都是用于把MVC用户控件嵌入到View中。

    Html.RenderPartial是直接将MVC用户控件嵌入到界面上

    @{Html.RenderPartial("SupplierList ");} 

    注意: MVC用户控件必须放在调用者同一目录下,也可以放在View/Shared中。

    @Html.RenderPartial("~/Views/ Supplier/SupplierList.ascx"); 

    指明MVC用户控件所放的具体目录。Html.RenderAction是通过Controller中的Action来调用MVC用户控件

    在MVC 2.0中,新增加了Html.RenderAction();这个方法RenderPartial有点不一样,他是直接重新执行一次Controller → Model → View的顺序,然后把产生的页面带回到原来的View中再回传。

    所以Html.RenderAction中传递的参数是执行的Controller和Action名称。若是在控制器中的某个方法只能让Html.RenderAction()调用时,可以在方法上添加特性[ChildActionOnly],其它的地方无法访问。

    public class ChildActionOnlyTestController : Controller
    {
     [ChildActionOnly]
     public ActionResult GetSupplierList()
     {
      var controller = new SupplierController();
      return controller.SupplierList();
     }
    }

    以下是执行过程比较图

    一个示例:
    Controller:

    //文章菜单列表
    [ChildActionOnly]
    public ActionResult ArticleMenu()
    {
     var item = _db.Classes.ToList();
      return PartialView(item);
    }

    View:Articlemenu.cshtml

    @model IEnumerable<Class>
    @foreach (var item in Model)
    {
     @Html.ActionLink(item.ClassName,item.ActionName, "Article", null, new { @class = "tree_children", @target = "MainFrame" })
    }

    Add View:Index.cshtml

    @{Html.RenderAction("ArticleMenu", "Article");}

     第二个示例:
    Controller: 注意PartialView里加载的是部分视图并不是model

    [ChildActionOnly]
    public ActionResult CartSummary()
    {
    var cart = ShoppingCart.GetCart(this.HttpContext);
    ViewData["CartCount"] = cart.GetCount();
     return PartialView("CartSummary");
    }

    PartiaView:CartSummary.cshtml

    @Html.ActionLink("Cart (" + ViewData["CartCount"] + ")",
        "Index",
        "ShoppingCart",
        new { id = "cart-status" })

    Add View:

    @{Html.RenderAction("GenreMenu", "Store");}
  • 相关阅读:
    【Java】XML编码
    【GIS】ArcGIS瓦片组织规则
    论写代码的合理性
    快速解决github网页图片显示不了的问题
    pyqt5-tools安装后 desinner.exe 报错 PyQt5 the application failed to start because no Qt platform could be initialized 最强大快速的解决
    Prometheus基本概述
    sql在group by 中使用case when
    【sql server自动化】sql server自动化备份
    (4.45)数据库编程中的三种性能模式比较
    【redis故障处理】redis哨兵节点之间无法互相识别通信
  • 原文地址:https://www.cnblogs.com/firstcsharp/p/3142091.html
Copyright © 2011-2022 走看看