Layout布局
原文链接:https://www.cnblogs.com/maoyazhi/p/5946455.html
layout方式布局就是相当于一个模板一样的,相当于定义好了框架,作为一个母版页的,使用布局或母版页的好处是,我们不需要在每个视图中都设置一份相同的内容,在它下面的页面需要修改不同代码的地方使用@RenderBody()方法。
1 2 3 4 5 6 7 8 9 10 | <! DOCTYPE html> < html lang="en"> < head > < meta charset="utf-8"/> < title >我的网站 - @Page.Title</ title > </ head > < body > @RenderBody() </ body > </ html > |
子页面中:
1 2 3 4 5 6 | @{ Layout = "/LayoutPage.cshtml"; Page.Title = "测试页面哦"; } < p >This is a layout test</ p > |
前面我们在创建View的时候,我们勾选了使用布局或母版页,但是我们没有告诉vs使用哪一个,默认即是空的。在项目的Views文件中,我们可以看到一个_ViewStart.cshtml文件,里面的内容是:
1 2 3 | @{ Layout = "~/Views/Shared/_Layout.cshtml"; } |
MVC呈现视图的时候,默认情况下会自动查找_ViewStart.cshtml文件,以它作为母版来呈现用户请求的视图。母版的呈现是MVC内部处理的,这种以下划线(_)开头的视图文件,一般是不能直接返回给用户。
如果创建一个视图不想使用Layout,则可以在创建视图的对话框取消“使用布局和母版页”选项,创建后会生成如下代码:
1 2 3 4 5 6 7 8 9 10 11 | @{ Layout = null; } <! DOCTYPE html> < html > < head > < title >About</ title > </ head > < body > < div > </ div > </ body > </ html > |
由于没有使用Layout,视图中必须包含用于呈现HTML页面每个基本元素,而且必须指定Layout=null。
Page
page是当需要在一个页面中,输出另外一个razor文件的内容时候用到,比如头部或者尾部这些公共的内容时候需要用到。输出就使用 @RenderPage()方法
如:A页面中也要把B页面的内容输出
A页面:
1 2 3 | < p > @RenderPage("/b.cshtml") </ p > |
B页面:
1 | < font color="red">这是一个子页面</ font > |
Section区域
RenderSection是定义在Layout的中使用的,可以理解成是为了定义该母版页公共部分,但是其子页面有例外,这时可以使用RenderSection来定义;
使用方法是在在要Layout的父页面中使用@RenderSection("Section名称 ",required: false),第一个参数是section的名称,第二个参数是来定义是否所有的子页面都需要定义这个section,定义显示,没有定义则不显示;
定义:
1 2 3 4 5 6 7 8 9 10 11 | <! DOCTYPE html> < html lang="en"> < head > < meta charset="utf-8"/> < title >我的网站 - @Page.Title</ title > </ head > < body > @RenderSection("sideMenu",required: false) @RenderBody() </ body > </ html > |
在它的子页面中:
1 2 3 | @section sideMenu{ Hello This is a section implement in About View. } |
含义:就是占位用的,给大家多一个选择。假设这样的场景,某几个页面需要引用一个专用的CSS文件(其它所有页面都用不到),用@section就可以很方便地在母版的header里预留一个位置,在任何需要的场景里可以直接link外部样式或者写内部样式。
css/js文件引用
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
上面几行加载 css 和 js 文件,这些文件在 App_Start > BundleConfig.cs 中指定:
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
"~/Scripts/jquery.validate*"));
// 使用要用于开发和学习的 Modernizr 的开发版本。然后,当你做好
// 生产准备时,请使用 http://modernizr.com 上的生成工具来仅选择所需的测试。
bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
"~/Scripts/modernizr-*"));
bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
"~/Scripts/bootstrap.js",
"~/Scripts/respond.js"));
bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/bootstrap.css",
"~/Content/site.css"));
// 将 EnableOptimizations 设为 false 以进行调试。有关详细信息,
// 请访问 http://go.microsoft.com/fwlink/?LinkId=301862
BundleTable.EnableOptimizations = true;
}
@HTML
@Href("~/")
表示网站的根目录
@Html.Raw(Module.Content)
@Html.Raw(Module.Content) 输出HTML;如:@Html.Raw('<font color='red'>红字</font>'),就会显示出红色的”红字“;
@Html.Action(action, controller)
加载局部页面。例如在模板页中使用:@Html.Action("Contact", "Company")
在CompanyController中有如下方法:
public PartialViewResult Contact(){
return PartialView();
}
@Html.Partial("PartialViewName")
@Html.Partial("PartialViewName"):输出一个Partial视图
我的理解是把内容分块进行分割;
@Html.ActionLink()
@Html.ActionLink("linkText", "actionName")
该重载的第一个参数是该链接要显示的文字,第二个参数是对应的控制器的方法
默认控制器为当前页面的控制器,如果当前页面的控制器为Products,则 Html.ActionLink("detail","Detail")
则会生成 <a href="/Products/Detail">all</a>
@Html.ActionLink("linkText", "actionName", "controlName")
该重载比第一个重载多了一个参数,他指定了控制器的名称,
如Html.ActionLink("detail","Detail","Products")则会生成
<a href="Products/Detail">all</a>
@Html.ActionLik("linkText", "actionName", routeValues)
routeValue可以向action传递参数,如Html.ActionLink("detail","Detail", new { id=1})
会生成 <a href="Products/Detail/1">detail</a>,
此处假设当前的控制器是Products.
@Html.ActionLink("linkText", "actionName", routeValues, htmlAttributes)
htmlAttribute可以设置<a>标签的属性,
如 Html.ActionLink("detail","Detail", new{id=1}, new{ target="_blank"})
会生成 <a href="Products/Detail/1" target="_blank">detail</a>,
需要主要的是如果写成 new{ target="_blank", class="className"}则会报错,
因为class是关键字,此处应该写成 @class="className"。
@Html.ActionLink("linkText", "actionName", "controlName", routeValues, htmlAttributes)
该重载包含了上面提到的所有参数类型。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2022-06-05 .torrent文件下载方法