ASP.NET MVC5 视图相关学习
MVC Razor模板引擎中3个重要的方法:@RenderBody、@RenderPage、@RenderSection
1、@RenderBody
在Razor引擎中布局页面类似于asp.net中的母版页功能,视图的内容会和布局页面合并呈现。
当前视图内容会通过布局页面(Shared/_Layout.cshtml) 中的@RenderBody()方法呈现在标签之间。
默认布局页面设置:
_ViewStart.cshtml
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
当创建新视图时,不指定任何布局页面,默认会加载_ViewStart.cshtml中指定的布局页面。
如果不想使用默认布局页,可以在当前视图中设置Layout值,设置null不使用任何布局页。
注意:如_ViewStart.cshtml都是特定的名字,已下划线开头的都有特殊的意义。
2、@RenderPage
要引用呈现的视图,如网站头部、底部可单独放在一个共享的视图文件夹中,然后在布局页中使用。
方法调用,用法如下:
@RenderPage("~/Views/Shared/_Header.cshtml")
带参数
@RenderPage("~/Views/Shared/_Header.cshtml",new{name="tom",age=18)
调用页面获取参数:
//获取 RenderPage() 传递过来的参数
@PageData["name"]
3、@RenderSection
此方法就是在Layout布局页中定义了分段,留给使用该布局页的视图来实现。
也就是说,如果某个视图模板中定义了一个节,那么可以把它单独呈现出来,用法如下:
@RenderPage(“~/Views/Shared/_Header.cshtml”)
@RenderBody()
@RenderSection(“footer”)
当然还要在视图中定义节,否则会出现异常:
@section footer {
Footer Here
}
为了防止因缺少节而出现异常,可以给RenderSection()提供第2个参数:
@RenderSection(“footer”, false)
ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别
1、带有Render的办法返回值是void,在办法内部进行输出;不带的返回值类型为MvcHtmlString,所以只能如许应用:
@Html.Partial 对应 @{Html.RenderPartial(....);}
@Html.Action 对应 @{Html.RenderAction(....);}
2、Action、RenderAction加载办法的视图,履行Controller → Model → View的次序,然后把产生的页面带回到本来的View中再回传。而Partial、RenderPartial直接加载视图文件内容
使用方法:@Html.Action(action,
controller)加载局部页面。
例如在模板页中使用:@Html.Action("Contact",
"Company")
在CompanyController中有如下方法:
public PartialViewResult Contact()
{
return PartialView();
}
3、 Html.Partial可以直接供给用户控件名作为参数,而Html.Action须要有对应的Action,在Action内部返回PartailResult(即retun PartialView())。
4、对于简单的没有任何逻辑的用户控件,推荐应用Html.Partial;对于须要设置一些Model的用户控件,推荐应用Html.Action。当然,有Model数据也是可以应用Html.Partial办法的,可以看办法的重载。
5、应用Html.Action有个益处,就是可以按照不合的场景选择不合的用户控件。
比如:
@Html.Action("UserInfoControl")在对应的UserInfoControl这个Action中,在用户未登录的时辰,可以retun PartialView("LogOnUserControl");登录后,可以retun PartialView("UserInfoControl");
RenderPage()和RenderPartial()的区别:
RenderPage()调用的页面只能使用其传递过去的数据。
RenderPartial()是可以使用viewdata,model等数据的。
如:@{Html.RenderPartial("BasicChart",model);}
用这个重载可以在部分视图里使用强类型,然后在主视图中使用第二个参数传model过去
@{Html.RenderPartial("BasicChart",ViewData["myData"]);}
Html.RenderPartial和Html.RenderAction的区别:
Html.RenderPartial适合用在重覆使用的UserControl,并且只需要透过Model来呈现内容,或是对于广告的UserControl也适合使用。
Html.RenderAction则会先去请求Controller的Action方法,如果此UserControl是需要透过资料库取得资料来呈现(透过Action来读取资料库),此时会比较适合使用此方式。
ASP.NET MVC5 视图相关学习的更多相关文章
- ASP.NET MVC5 视图预编译
ASP.NET MVC5 视图预编译 ASP.NET MVC5 视图预编译 关于Razor视图及引擎原理,就不多说了. 这里通俗或者不恰当地说,cshtml视图文件是先编译成dll文件,再通过视图 ...
- ASP.NET MVC5框架揭秘 学习笔记01
1.自治视图 在早期(作者也没说明是多早,自己猜吧),我们倾向于将所有与UI相关的操作糅合在一起(现在我身边还有很多人这样做),这些操作包括UI界面的呈现. 用户交互操作的捕捉与响应(UI处理逻辑). ...
- ASP.NET MVC5 高级编程-学习日记-第一章 入门
1.1 ASP.NET MVC 简介 ASP.NET是一种构建Web应用程序的框架,它将一般的MVC(Model-View-Controller)模式应用于ASP.NET框架. 1.1.1 MVC模式 ...
- ASP.NET MVC5 与EF6学习系列
最近学习使用MVC5和EF6,博客园搜索了一番,写下这篇文章记录,以便学习使用. 一.ASP.NET MVC5 网站开发 @洞庭夕照写的博客系列 ASP.NET MVC5 网站开发实践 - 概述 AS ...
- ASP.NET MVC5 高级编程-学习日记-第三章 视图
开发人员之所以花费大量时间来重点设计控制器和模型对象,是因为在这些领域中,精心编写的整洁代码是开发一个可维护Web应用程序的基础. 3.1 视图的作用 视图的职责是向用户提供用户界面.当控制器针对被请 ...
- ASP.NET MVC5 及 EF6 学习笔记 - (目录整理)
个人从传统的CS应用开发(WPF)开始转向BS架构应用开发: 先是采用了最容易上手也是最容易搞不清楚状况的WebForm方式入手:到后面就直接抛弃了服务器控件的开发方式,转而采用 普通页面+Ajax+ ...
- ASP.NET MVC5 高级编程-学习日记-第二章 控制器
2.1 控制器的角色 MVC模式中的控制器(Controller)主要负责响应用户的输入,冰球在响应时修改模型(Model).通过这种方式,MVC模式中的控制器主要关注的是应用程序流.输入数据的处理, ...
- asp.net mvc视图中使用entitySet类型数据时提示出错
asp.net mvc5视图中使用entitySet类型数据时提示以下错误 检查了一下引用,发现已经引用了System.Data.Linq了,可是还是一直提示出错, 后来发现还需要在Views文件夹下 ...
- ASP.NET MVC5学习笔记01
由于之前在项目中也使用MVC进行开发,但是具体是那个版本就不是很清楚了,但是我觉得大体的思想是相同的,只是版本高的在版本低的基础上增加了一些更加方便操作的东西.下面是我学习ASP.NET MVC5高级 ...
随机推荐
- 使用CAtlRegExp类进行密码校验
前言 最近做了一个小需求,新建用户时输入的密码必须包含数字.小写字母.大写字符以及特殊字符,目的是为了增强密码的强度,如果没有其中一项,就需要弹出窗口进行提示. 正则表达式 对于此类 ...
- THINKPHP5判断当前浏览器请求方式
作用 代码 是否为 GET 请求 if (Request::instance()->isGet()) 是否为 POST 请求 if (Request::instance()->isPost ...
- ios开发之--PDF文件生成
写项目的时候,碰到一个需求,就是在手机端根据指定的文件内容生成PDF文件,并可以保存到手机上,因为以前只是听说过,没有真正的去了解过这个需求,通过查阅资料,可以实现这个功能,话不多说,代码如下: -( ...
- 了解 IMyInterface.Stub
Service中的IBinder 还记得我们在MyService中利用new IMyInterface.Stub()向上转型成了IBinder然后在onBind方法中返回的.那我们就看看IMyInte ...
- c++多线程例(互斥体,共同访问)
<pre name="code" class="cpp">//这是2个线程模拟卖火车票的小程序 #include <windows.h> ...
- 【BZOJ4726】[POI2017]Sabota? 树形DP
[BZOJ4726][POI2017]Sabota? Description 某个公司有n个人, 上下级关系构成了一个有根树.其中有个人是叛徒(这个人不知道是谁).对于一个人, 如果他 下属(直接或者 ...
- Sonnet-十四行诗
<Wish> Of our best wishes we could desire increase, That thereby rose's aroma might never die, ...
- Struts2数据验证与使用Java代码进行数据验证
Struts2数据验证 使用Java代码进行数据验证 重写ActionSupport的validate()方法 对Action类的中所有请求处理方法都会进行验证! 对Action类的数据属性进行检查, ...
- JavaMath方法、服务器与Tomcat安装与配置步骤
一.Math Math.PI 记录的圆周率 Math.E 记录e的常量 Math中还有一些类似的常量,都是一些工程数学常用量. Math.abs 求绝对值 Math.sin 正弦函数 Math. ...
- City of stars
City of stars 英:[ˈsɪtɪ] [ɒv; (ə)v] [stɑːz] 美:[ˈsɪti] [əv] [stɑːz] Are you shining just for me? 英:[ɑː ...