zoukankan      html  css  js  c++  java
  • Html.Action和Html.RederAction来创建子视图

    1. 父视图和子视图

    父视图是包含了调用返回子视图的动作方法的视图。

    父视图包含大部分用于呈现页面的HTML。子视图仅包含用于展示视图某部分的必须的标记。

    例如,一个子视图创建一个列表,视图可能仅仅包含列表所需要的HTML,像下面的例子:

    <ul>   
    <li>Item 1</li>   
    <li>Item 2</li>   
    <li>Item 3</li> 
    </ul>   

    所有其它的标记(body, head等等)会在包含在父视图中。

    2.调用Action和RenderAction辅助方法用于呈现子视图

    ASP.NET MVC提供 HTML辅助方法(扩展方法)呈现大多数的 HTML元素,例如表单和链接,那种简化了例如像输入验证这样的公共任务。用于呈现子视图的两个 HTML辅助方法分别是:Aciton和RenderAction。这两个HTML辅助方法都在ChildActionExtensions类中。

    Action方法以字符串的形式返回子视图,可以直接被呈现。

    RenderAction方法在适当的地方呈现子视图。

    例如,假设你有一个名为ChildList 的子视图,它包含了上一切显示的HTML代码。控制器包含了下面的动作方法,用于呈现子视图:

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

    注意在控制器中,没有特定的方法呈现父视图或子视图。你呈现一个父视图,父视力再依次呈现它需要的子视图。
    为了调用动作方法在父视图中呈现子视图,你可以像下面的示例一样使用Action辅助方法或RenderAction辅助方法。

    // One alternative (renders a string)
    <%= Html.Action("ChildList") %>
    
    //Another alternative (renders in place)
    <% Html.RenderAction("ChildList"); %> 
     
    
    注意因为Html.Action辅助方法返回字符串,必须要等号"="。

    3.为辅助方法传递参数
    你可以在父视图的不同位置调用相同的动作方法,通过参数传递决定要呈现什么。Action和RenderAction两个方法都有方法重载接受一个包含了一对参数名和值的对象。下面的代码示例了RenderAction方法调用展示动作方法。在这种情况下,它传递一个包含在这部分呈现的子视图的名称值的匿名对象。标记呈现了一个“新闻”片段,接着是一个“天气”片段。

    <% Html.RenderAction("Display", new { section = "News" }); %>
    <% Html.RenderAction("Display", new { section = "Weather" }); %> 
     
    
    呈现动作方法看起来可能像下面的例子:
    
     
    public ActionResult Display(string section)
    {
        return View(section);
    } 

    4.从其它控制器或区域调用动作方法

    你可以调用不是当前控制器中的动作方法。要实现这样,你调用RenderAction的一个重载方法,指定动作方法和控制器的名称。

    下面的示例展示了调用SectionController类中的动作方法。

    第一个参数(字符串)是动作方法的名称,

    第二个参数(也是字符串)是控制器的名称。

    <% Html.RenderAction("Display", "Section"); %>   

    如果你需要的动作方法在其它的区域中,你可以在对象中传递区域名称,如下:

    <% Html.RenderAction("Display", new { area = "Navigation" }); %>   

    通过使用RenderAction不同的重载方法,你就可以在不同的区域调用不同的控制器。

    5.Razor视图引擎下简单实例:

    controller:

            public ActionResult Index()
            {
                return View();
            }
    
            //Html.Action
            public ActionResult ActionOne()
            {
                return View();
            }
    
            //Html.RenderAction
            public ActionResult RenderActionOne()
            {
                return View();
            }
    
            //输出内容
            public void WriteText()
            {
                Response.Write("<p>WriteText:输出的内容</p>");
            }

    view:---Action

        <div>
            <h4>显示当前Controller下的Action1</h4>
            @Html.Action("Index")
            <hr />
            <h4>显示当前Controller下的Action2</h4>
            @Html.Action("WriteText")
            <hr />
            <h4>显示UrlHelper下的UrlOne</h4>
            @Html.Action("UrlOne","UrlHelper");
        </div>

    view:---RenderAction

            @{
                Html.RenderAction("UrlOne", "UrlHelper");
            }
  • 相关阅读:
    BZOJ1787 [Ahoi2008]Meet 紧急集合[结论题]
    poj3728 The merchant[倍增]
    poj2750 Potted Flower[线段树]
    poj2482 Stars in Your Window[扫描线]
    poj2182 Lost Cows[BIT二分]
    UVA12096 The SetStack Computer
    第05组(65) 需求分析报告
    团队介绍与选题报告
    数据采集技术第三次作业
    结对编程作业
  • 原文地址:https://www.cnblogs.com/tianma3798/p/3727282.html
Copyright © 2011-2022 走看看