ASP.NET MVC 视图学习,纯干货
2015-11-05 22:45
597 查看
最近用MVC专门为自己做了一个网站,用来记录文章心情和日记。加上和同事的一些交流感觉颇深。所以想把13年买的MVC 4高级编程重新看一遍,记录一些东西,以后应该用的到。视图总是被控制器渲染,因为控制器为视图提供了要渲染的数据,这里我高度精简了视图的使用技巧。
指定视图
当不指定视图名称时,按照约定返回视图
如果想渲染相同目录下的其他视图,直接指定名称 view("motIndex")
如果指定其他目录的视图,使用view("~/Views/Example/Index.cshtml").为避免视图引擎查找机制,需提供视图的扩展名。
ViewData和ViewBag,强类型
数据从控制器到视图是通过ViewData的ViewDataDictionary,ViewBag是Viewdata的动态封装器。具体差异可以查看:TempData,ViewData和ViewBag的比较
ViewData包含一个额外的Model属性,当使用强类型时,后台会先把值赋给ViewData.Model属性。对于视图中经常使用的Model命名空间,较好的办法就是在Views目录下web.config中进行声明。
有同事说不建议使用太多ViewData,会影响性能,这个我持保留意见,以前一直不知道页面上的强对象model就是ViewData里面的属性
Razor语法
略
HTML编码
一般只会使用RAW进行编码,但是对于JS编码很少用到,以后要注意了
Razor:@Html.Raw()
JS:@Ajax.JavaScriptStringEncode()
布局
@RenderBody()
@RenderSection("Footer") 和@RenderSection("",required,false) ,子页面使用方法:@section Footer{}
视图中没有定义的section,设置一些默认内容:@if(IsSectionDefined("Footer")){ RenderSection("Footer");}else{ //代码}
ViewStart
如果多个视图同用一个布局页,会产生冗余,也很难维护,会先于同目录下任何视图执行,也可以递归的应用到子目录的任何视图
部分视图
部分视图我觉得在MVC中应该重点使用,一个页面由多个部分视图组合,部分视图和强类型Model结合使用起来非常方便。
指定视图
当不指定视图名称时,按照约定返回视图
如果想渲染相同目录下的其他视图,直接指定名称 view("motIndex")
如果指定其他目录的视图,使用view("~/Views/Example/Index.cshtml").为避免视图引擎查找机制,需提供视图的扩展名。
ViewData和ViewBag,强类型
数据从控制器到视图是通过ViewData的ViewDataDictionary,ViewBag是Viewdata的动态封装器。具体差异可以查看:TempData,ViewData和ViewBag的比较
ViewData包含一个额外的Model属性,当使用强类型时,后台会先把值赋给ViewData.Model属性。对于视图中经常使用的Model命名空间,较好的办法就是在Views目录下web.config中进行声明。
有同事说不建议使用太多ViewData,会影响性能,这个我持保留意见,以前一直不知道页面上的强对象model就是ViewData里面的属性
Razor语法
略
HTML编码
一般只会使用RAW进行编码,但是对于JS编码很少用到,以后要注意了
Razor:@Html.Raw()
JS:@Ajax.JavaScriptStringEncode()
布局
@RenderBody()
@RenderSection("Footer") 和@RenderSection("",required,false) ,子页面使用方法:@section Footer{}
视图中没有定义的section,设置一些默认内容:@if(IsSectionDefined("Footer")){ RenderSection("Footer");}else{ //代码}
ViewStart
如果多个视图同用一个布局页,会产生冗余,也很难维护,会先于同目录下任何视图执行,也可以递归的应用到子目录的任何视图
部分视图
部分视图我觉得在MVC中应该重点使用,一个页面由多个部分视图组合,部分视图和强类型Model结合使用起来非常方便。
不经过Controll的部门视图:Html.RenderPartial("GetName");
需要经过Controll的视图@Html.RenderAction("Datagrid", "DataList", new { area = "Common" }); ajax加载: $("xx").load('/Home/Index')
相关文章推荐
- 玩转树莓派--GPIO操作
- ASP.NET MVC Routing学习笔记(一)
- metasploit渗透测试笔记(内网渗透篇)
- ASP.Net MVC View(视图)
- ASP.NET MVC下使用文件上传和IIS7下的默认设置限制了上传大小的方法
- 树莓派上手实战之系统之raspi-config系统配置工具
- ASP.NET MVC Forms验证机制
- asp.net中virtual和abstract的区别
- Metasploit 读书笔记
- ASP.NET ValidationSummary 控件
- 用DevExpress做界面开发:ASP.NET界面开发框架
- ASP.MVC 项目中使用 UEditor 文本编辑器
- asp.net mvc 区域的使用
- 【Asphyre引擎】Asphyre时隔3年,更名为PXL,全平台支持!
- asp.net 时间戳与datetime 转换
- 解决asp.net mvc UpdateModel更新对象后出现null问题的方法
- asp.net calender控件显示一周之内的日期
- asp.net mvc UpdateModel 更新对象后出现null
- Asp.Net操作Word System.Runtime.InteropServices.COMException
- ASP.NET MVC 4中如何为不同的浏览器自适应布局和视图