zoukankan      html  css  js  c++  java
  • MVC部分视图的使用(Html.Partial/RenderPartial、Html.Action/RenderAction、RenderPage)

    ASP.NET MVC 里页面往往会有许多重用的地方,可以进行封装重用。
    使用部分视图有以下优点: 1. 可以简写代码。 2. 页面代码更加清晰、更好维护。
    在视图里有多种方法可以 加载部分视图,包括: Partial() 、RenderPartial() 、 Action() 、RenderAction() 、 RenderPage() 方法

    一、Partial与RenderPartial

       1.Razor 语法: @Html.Partial() 与 @{Html.RenderPartial();}
       2.区别:Partial 可以直接输出内容,它内部是将 html 内容转换为 string 字符(MVCHtmlString)(进行Html编码),然后缓存起来,最后在一次性输出到页面。显然,这个转换的过程,会降低效率,所以通常使用 RenderPartial 代替。 这两者都只是抓取分部视图页面内容,不能执行分部视图方法,所以用Partial或RenderPartial方法来显示分部视图不用建立对应的Action,因为不走Action.
     
    二、Action与RenderAction
       1.Razor 语法:@Html.Action()与@{Html.RenderAction();}
       2.区别:Action 也是直接输出,和 Partial 一样,也存在一个转换的过程。不如 RenderAction 直接输出到当前 HttpContext 的效率高。
    除此之外,Action与Partial相比,Action访问了控制器中的Action,执行了Action内部的业务。
     
    三、RenderPage
       1.Razor语法:@RenderPage()
       2.区别:也可以使用 RenderPage 来呈现部分,但它不能使用 原来视图的 Model 和 ViewData ,只能通过参数来传递。而 RenderPartial、RenderAction 可以使用原来视图的 Model 和 ViewData。@RenderPage也并没有执行Action。
    不传参的情况
    <!DOCTYPE html>   
    <html>  
    <head>  
        <meta name="viewport" content="width=device-width" />  
        <title>Index</title>  
    </head>  
    <body>  
        <div>   
            <h3>我是首页</h3>  
            <section>  
                <h4>分部视图</h4>         
               @RenderPage("~/Views/Templates/Partial1.cshtml")  
            </section>  
        </div>  
    </body>  
    </html>  

    传参的情况      获取 RenderPage() 传递过来的参数--(@PageData["param"]

    <!DOCTYPE html>  
    <html>  
    <head>  
        <meta name="viewport" content="width=device-width" />  
        <title>Index</title>  
    </head>  
    <body>  
        <div>   
            <h3>我是首页</h3>  
            <section>  
                <h4>分部视图</h4>  
               @RenderPage("~/Views/Templates/Partial1.cshtml",new { param1="longxi",param2=""})  
            </section>  
        </div>  
    </body>  
    </html>  

    Partial1.cshtml

    @{   
        var param = string.Format("{0}-{1}", PageData["param1"], PageData["param2"]);  
    }  
    @Html.Raw(param)  

     四、RenderBody

      在Razor引擎中没有了“母版页”,取而代之的是叫做“布局”的页面(_Layout.cshtml)放在了共享视图文件夹中。在这个页面中,会看到标签里有这样一条语句:

    @RenderBody()

      其实它的作用和母版页中的服务器控件类似,当创建基于此布局页面的视图时,视图的内容会和布局页面合并,而新创建视图的内容会通过布局页面的@RenderBody()方法呈现在标签之间。

      这个方法不需要参数,而且只能出现一次。

    五、RenderSection 模板页预设区域  

      在模板页中加入@RenderSection(“head”),使用模板页的页面需加入@section标记

    @section Head{
    
    <script type="text/javascript">
    
    $(function () {
    
    alert("hello jquery");
    
    });
    
    </script>
    
    }
    则:使用模板页的页面RenderSection(“head”)位置变成以上。

    @RenderSection()还有一个重载方法参数为bool类型如果为true则必须有相应的@section,如果为false则不必须有。

    如果为true则配合IsSectionDefined()使用

    @{

        if (IsSectionDefined("SectionB"))

             {

                  @RenderSection("SectionB")

             }

    }

    第一个重载方法也要配合IsSectionDefined()使用

    demo:
    开始渲染Section
           声明方式1(推荐):SectionA:<br />
           @RenderSection("SectionA", false)

          
           声明方式2:SectionB:<br />
           @{
               if (IsSectionDefined("SectionB"))
               {
                   @RenderSection("SectionB")
               }
           }

           渲染Sction结束
  • 相关阅读:
    java基础:3.1 一维数组、foreach、数组复制
    java基础:2.1 方法、重载、随机字符、方法抽象
    java基础:1.2 输入重定向、输出重定向
    java基础:1.1 基础知识速学,程序练习进制转换
    计算机网络:网络安全
    计算机网络:运输层
    整个servlet类的继承体系
    使用IDEA创建Servlet程序
    通过继承HttpServlet类实现servlet程序
    servlet中get和post请求的分发处理
  • 原文地址:https://www.cnblogs.com/llljpf/p/7802987.html
Copyright © 2011-2022 走看看