返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >ASP.NETMVC使用母版页视图
  • 551
分享到

ASP.NETMVC使用母版页视图

2024-04-02 19:04:59 551人浏览 八月长安
摘要

一、母版页介绍和使用 母版页的扩展名为".cshtml",也叫做视图布局页,它相当于网页的模板。在其他网页中,只要引用了母版页,母版页的页面内容就可以自动显示出来

一、母版页介绍和使用

母版页的扩展名为".cshtml",也叫做视图布局页,它相当于网页的模板。在其他网页中,只要引用了母版页,母版页的页面内容就可以自动显示出来,设计者可以修改引用的母版页中预留的部分,其他部分保持不变,这样就可以使多个页面的风格保持一致,给网页设计带来了很大的方便。

1、创建母版页视图的要点

(1)、在Views的子文件夹Shared文件夹里面添加。

(2)、以“_”前缀作为开头。

(3)、以"Layout.cshtml"作为结束。

2、mvc母版页里的三个功能点:

(1)、RenderBody-子页面内容占位符。

(2)、RenderPage-引用呈现一个页面。

(3)、RenderSection-内容占位符。

如果新建一个MVC程序,里面有没有使用母版页视图呢?查看Index视图:

从上面的截图中可以看出,Index里面只有两个DIV,但是一个基本的网页代码需要有HTML、head、body等元素标签组成,但是这里面并没有。同时,浏览index视图:

这时查看网页源代码:

从上面的截图中可以看到有HTML、head、body等HTML元素,到这里可以看出,MVC中已经使用了母版页。MVC中默认使用Shared文件夹里面的_ViewStart.cshtml视图。

二、RenderBody

RenderBody的作用是子页面内容占位符。即母版页中使用了RenderBody的地方会使用子页面的内容来代替。以_Layout视图为例:

在_Layout母版页中使用了RenderBody,所以运行的时候这部分内容将会被Index里面的内容代替。

下面我们自己重新定义一个母版页,同时定义一个子页面来使用这个母版页来查看RenderBody的作用。

1、添加母版页

在Shared文件夹上面右键添加,选择MVC5布局页

2、命名为_TestLayout

生成的模板页代码如下:

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
</head>
<body>
    <div>
        @RenderBody()
    </div>
</body>
</html>

3、修改母版页,修改后的母版页代码如下:

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
</head>
<body>
    <div>
        我是母版页,在子页面中不允许更改
        <!--内容页占位符-->
        @RenderBody()
    </div>
</body>
</html>

4、创建子页面使用母版页

在Home控制器里面添加一个ActionName为Test的Action方法,并添加视图:

生成的Test视图如下图所示:

注意:如果Layout=null,则表示不使用母版页视图。

修改Test视图也,修改后的代码如下:

@{
    ViewBag.Title = "Test";
    Layout = "~/Views/Shared/_TestLayout.cshtml";
}

<h2>Test</h2>
<div>
    我是子页面-home控制器的Test方法
</div>

5、运行程序,浏览Test视图

通过运行结果和查看网页源代码,可以看出是母版页和子页面组成的页面。

三、RenderPage

RenderPage:引用呈现一个页面,即在一个页面中引用呈现另外一个页面,也就是说另外一个页面是这个页面的一部分。

以网页尾部布局为例说明RenderPage。

1、在Shared文件夹里面新添加一个分部页,并命名为FooterPartial。

2、修改分部页

修改后的代码如下:

<div>
    我是页脚
</div>

3、在母版页中使用分部页

在RenderBody的下面使用RenderPage,RenderPage方法的参数如下图所示:

从上图中可以看出,使用RenderPage()方法的时候,只需知道分部页的路径即可,修改后的母版页代码如下:

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
</head>
<body>
    <div>
        我是母版页,在子页面中不允许更改
        <!--内容页占位符-->
        @RenderBody()
        @RenderPage("_FooterPartial.cshtml")
    </div>
</body>
</html>

4、运行结果

四、RenderSection

先来看下面一个例子:

在Test视图里面添加一段脚本,修改后的Test视图代码如下:

这是在运行程序,结果如下:

通过运行结果发现脚本在视图内容呈现之前先执行了,这显示不是我们想要的效果。我们希望是在整个页面都加载完成之后再执行脚本。修改布局页代码如下:

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
</head>
<body>
    <div>
        我是母版页,在子页面中不允许更改
        <!--内容页占位符-->
        @RenderBody()
        <div style="color:blue">
            <p>
                <!---->
                @RenderSection("SectionContent")
            </p>
        </div>
        @RenderPage("_FooterPartial.cshtml")
    </div>

</body>

</html>

子页面修改如下:

运行结果:

如果在母版页中定义了RenderSection,而在子页面中并没有对定义的RenderSection进行处理,那么结果是怎样的呢?

从上图中可以看出,如果在子页面中没有对定义的RenderSection进行处理,程序运行的时候直接就报错了:SectionContent节未定义。如果不想处理RenderSection该如何修改呢?

RenderSection方法截图如下:

如果不想处理RenderSection,那么required参数设置为false就可以了,修改后的布局页代码如下:

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
</head>
<body>
    <div>
        我是母版页,在子页面中不允许更改
        <!--内容页占位符-->
        @RenderBody()
        <div style="color:blue">
            <p>
                <!---->
                @RenderSection("SectionContent",false)
            </p>
        </div>
        @RenderPage("_FooterPartial.cshtml")
    </div>

</body>

</html>

这时在运行程序就可以正常运行了。

通过上面的例子,我们可以使用下面的方法解决开头例子中遇到的问题:在body元素的结束标签上面定义RenderSection,这时无论在子页面的任何位置定义script脚本,都会在页面全部加载完成以后才执行脚本。

布局页定义如下:

五、总结

1、RenderBody

在Razor引擎中没有“母版页”,取而代之的是叫做“布局”的页面(_Layout.cshtml)放在了共享视图文件夹中。在这个页面中,会看到标签里面有这样一条语句:
@RenderBody()
其实它的作用和母版页中的服务器控件类似,当创建基于此布局页面的视图时,视图的内容会和布局页面合并,而新创建视图的内容会通过布局页面的@RenderBody()方法呈现在标签之间。
这个方法不需要参数,而且只能出现一次。

2、RenderPage

从名称可以猜出来这个方法是要呈现一个页面。比如网页中固定的头部可以单独放在一个共享的视图文件中,然后在布局页面中通过这个方法调用,用法如下:
@RenderPage("_FooterPartial.cshtml")
可以带参数
@RenderPage("_FooterPartial.cshtml",new {parm="my",parm2="you"})
调用页面获取参数:
//获取RenderPage()传递过来的参数
@PageData["param"]

3、RenderSection

布局页面还有节(Section)的概念,也就是说:如果某个视图模板中定义了一个节,那么可以把它单独呈现出来,用法如下:
@RenderBody()
@RenderPage("_FooterPartial.cshtml")
//模板里添加了一个节
@RenderSection("head")
当然还要在视图中定义节,否则会出现异常:

@secion head{
//do
}

为了防止因缺少节而出现异常,可以给RenderSection()提供第2个参数:
@RenderSection("head",false)
或者

@if(IsSectionDefined("head"))
{
    @RenderSection("head",false)
}
else
{
    <p>head Section is not defined!</p>
}

4、@Html.Partial

Partial每次都会创建自己的TextWriter实例并且把内容缓存到内存中,最后把所有write输出的内容发送到一个MvcString对象中。
更多时候我们会使用@{Html.RenderPartial("Details");}而不是@Html.Partial。
Html.RenderPartial()和@Html.Partial的区别:
Html.RenderPartial()直接输出至当前HttpContext(因为是直接输出,所以性能好)。
Html.Partial 将视图内容直接生成一个字符串并返回(相当于有个转义的过程)。
RenderPage()和RenderPartial()的区别
RenderPage()调用的页面只能使用其传递过去的数据。
RenderPartial()是可以使用ViewData、model等数据的。
如:@{Html.RenderPartial("BasicChart",model);}
用这个重载可以在部分视图里使用强类型,然后在主视图中使用第二个参数传model过去。
@{Html.RenderPartial("BasicChart",ViewData["myData"]);}

到此这篇关于asp.net MVC使用母版页视图的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: ASP.NETMVC使用母版页视图

本文链接: https://lsjlt.com/news/141781.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • ASP.NETMVC使用母版页视图
    一、母版页介绍和使用 母版页的扩展名为".cshtml",也叫做视图布局页,它相当于网页的模板。在其他网页中,只要引用了母版页,母版页的页面内容就可以自动显示出来...
    99+
    2024-04-02
  • ASP.NETMVC视图页使用jQuery传递异步数据的几种方式详解
    在ASP.NET MVC的视图页向控制器传递异步数据,可能是数组,JavaScript对象,json,表单数据,等等。 关于数据,JavaScript对象有时候和json长得一模一样...
    99+
    2024-04-02
  • ASP.NETCore中的Razor页面使用视图组件
    视图组件简介 在新的ASP.NET Core MVC中,视图组件类似于局部视图,但它们更强大。视图组件不使用模型绑定,仅依赖于您在调用时提供的数据。 视图组件特性: 呈现页面响应的某...
    99+
    2024-04-02
  • 如何使用IE8兼容性视图表示页面
    本篇文章为大家展示了如何使用IE8兼容性视图表示页面,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。使用IE8兼容性视图表示页面08年的项目为对应IE8提出页面在IE...
    99+
    2024-04-02
  • PythonDjango通用视图和错误视图的使用代码
    定义通用视图 修改 book/models.py 代码中的 AuthorInfo 类,如果一致则不必修改 class AuthorInfo(models.Model): id...
    99+
    2023-05-15
    Python Django视图 Python Django通用视图 Python Django错误视图
  • Python Django通用视图和错误视图怎么使用
    本文小编为大家详细介绍“Python Django通用视图和错误视图怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python Django通用视图和错误视图怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路...
    99+
    2023-07-06
  • Android 之 WebView (网页视图)基本用法
    本节引言 本节给大家带来的是Android中的一个用于显示网页的控件:WebView(网页视图)。 现在Android应用 层开发的方向有两种:客户端开发和HTML5移动端开发! 所谓的HTML5端就是:HTML5 + CSS + ...
    99+
    2023-08-31
    android harmonyos 华为
  • Win10预览版任务视图怎么用?
    Windows 10 是微软即将发布的下一代全新的系统,融合了 PC、平板与手机的系统。在新系统里,为桌面管理增加了新功能,即任务视图(虚拟桌面),可以让我们在系统中同时拥有多个桌面,目的是为了提高我们的工作效率,比如可...
    99+
    2023-06-11
    Win10预览版 win10任务视图 预览 视图 Win10
  • 如何使用mysql视图
    这篇文章主要讲解了如何使用mysql视图,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。什么是视图:视图是一种基于查询结果的虚拟表,数据来源的表称为基本表。视图的建立和删除不影响...
    99+
    2024-04-02
  • V$ACTIVE_SESSION_HISTORY视图的使用
    V$ACTIVE_SESSION_HISTORY 显示数据库中的采样会话活动。ASH每秒从v$session中取快照,存在V$ACTIVE_SESSION_HISTORY中,并收集所有活动会话的等待信息...
    99+
    2024-04-02
  • navicat视图怎么使用
    这篇文章主要介绍了navicat视图怎么使用,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。Navicat for mysql 是mysql数据库...
    99+
    2024-04-02
  • HTML怎么在web窗体调用操作母版页内容元素
    本篇内容介绍了“HTML怎么在web窗体调用操作母版页内容元素”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2024-04-02
  • 物化视图妙用__表同步使用物化视图方法
    物化视图创建后,会自动创建一张和物化视图同名的表,会在dba_objects中出现两个对象,OBJECT_TYPE分别是TABLE、MATERIALIZED VIEW。user_mviews、user_ta...
    99+
    2024-04-02
  • MYSQL中视图如何使用
    MYSQL中视图如何使用?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!1、什么是视图执行一条SQL,将结果集保存在一张虚拟...
    99+
    2024-04-02
  • Android Studio3.6新特性:视图绑定ViewBinding使用指南(Java版例程)
    视图绑定ViewBinding使用指南(Java版)修改build.gradle修改java代码注意事项工程代码 Android Studio ...
    99+
    2022-06-06
    Android Studio java版 studio JAVA 视图 Android
  • Android网格视图GridView的使用
    GridView(网格视图)是按照行列的方式来显示内容的,一般用于显示图片,图片等内容,比如实现九宫格图,用GridView是首选,也是最简单的。主要用于设置Adapter。 ...
    99+
    2022-06-06
    gridview Android
  • Oracle中如何使用all_视图
    Oracle中如何使用all_视图,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。数据字典相关连接:Oracle数据字典:常用字典Oracle数...
    99+
    2024-04-02
  • Oracle中如何使用dba_视图
    Oracle中如何使用dba_视图,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。数据字典相关连接:Oracle数据字典:常用字...
    99+
    2024-04-02
  • Oracle中如何使用user_视图
    这篇文章给大家介绍Oracle中如何使用user_视图,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。数据字典相关连接:Oracle数据字典:常用字典表存储关于关联数据库的信息,只有 O...
    99+
    2024-04-02
  • yii视图中怎么使用widget
    这篇文章给大家分享的是有关yii视图中怎么使用widget的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。三种yii视图中使用widget的方式一、显示详细信息:二、显示列表,可以进行条件限制和分页:控制器:视图:...
    99+
    2023-06-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作