ASP.NET MVC3学习--视图和模型(1)
来源:互联网 发布:淘宝网儿童女裤子 编辑:程序博客网 时间:2024/05/22 14:45
视图
视图的作用
视图的职责是向用户提供用户界面,向它提供对模型的引用后,它会将模型转换为准备提供给用户的格式.
在ASP.NET MVC中这个过程由两部分组成:
检查控制器提交的ViewDataDictionary(通过ViewData属性访问),另一部分是将其内容转换为HTML格式
从ASP.NET MVC 3开始,视图数据可以通过ViewBag属性访问,该属性是动态的,语法简单,可以访问通过ViewData属性访
问的相同数据.封装了ViewData,因此可以用类似访问属性的语法来检索字典中的值,如:
ViewBag.Message等同于ViewData[“Message”]
两者的差异:1、只有当要访问的关键字是一个有效的C#标识符时,ViewBag才其作用
如:在ViewBag[“Key With Spaces”]中存放一个值,那么将不能使用ViewBag访问改值
2、该动态值不能作为一个参数传递给扩展的方法,因为C#编译器为了选择正确的扩展方法,在编译时必须知道每个参数的类型.
如:
@Html.TextBox("name",ViewBag.Name)
会编译失败,如果想编译通过有两种方法1、使用ViewData["Name"],2、(string)ViewBag.Name
在强类型视图中,ViewDataDictionary拥有一个视图渲染的强类型模型对象,该模型可能代表了实际的域对象,为方便起见,
该模型对象可以通过视图的Model属性进行引用.
如
@{ Layout=null; } <h1>@ViewBag.Message</h1>
控制器中的控制行为:
Public ActionResult Sample(){ ViewBag.Message="Hello World"; Return View("Sample"); }
注意:该控制器将ViewBag.Message属性设置为一个字符串,然后返回一个名为Sample的视图,该视图将显示传递给
ViewBag.Message属性的值
指定视图
默认情况下在控制器中的操作方法返回的View()视图即与控制器名去掉Controller同名的视图,如果需要向其指定不同的
视图则需在View("OtherView")中指定要返回的视图名称即可
在一些情况下需要指定完全位于不同的目录结构中的视图,这时可以用带有~符号的语法来提供视图的完整路径,如:
Public ActionResult Index() { ViewBag.Message=“Hello World”; Return View(“~/Views/Example/Index.cshtml”); }
强类型视图
例:编写一个显示Album列表的视图,实现如下:
Public ActionResult List() { Var ablums=new List<Album>(); For(int i=0;i<5;i++) { albums.Add(new Album{ Title=“Olive”+i}); } ViewBag.Albums=albums; Return View(albums); }
在视图中显示如下:
<ul> @foreach(var a in (ViewBag.Albums as IEnumerable<Album>)) { <li>@a.Title</li> } </ul>
但是在强类型视图中,可以这样实现:
Public ActionResult List() { Var ablums=new List<Album>(); For(int i=0;i<5;i++) { albums.Add(new Album{ Title="Olive"+i}); } Return View(albums); }
视图中:
@model IEnumerable<MvcMusicStore.Models.Album> <ul> @foreach(var p in Model) { <li>@p.Title</li> } </ul>
视图模型
视图通常需要显示各种没有直接映射到域模型的数据,可以通过编写自定义的视图模型类来实现
添加视图
lScaffold Template
① Empty 创建一个空视图,使用@model语法指定模型类型
② Create 创建一个视图,其中带有创建模型新实例的表单,并为模型类型的每一个属性生成一个标签和编辑器
③ Delete 创建一个是视图,其中带有删除现有模型实例的表单,并为模型的每一个属性显示一个标签以及当前该属性的值
④ Details 创建一个视图,显示了模型类型的每一个属性的标签及相应值
⑤ Edit 创建一个视图,并带有编辑现有模型实例的表单,并未模型类型的每一个属性生成一个标签和编辑器
⑥ List 创建一个带有模型实例的表单,为模型 类型的每一个属性生成一列,确保操作方法向视图传递的是
IEnumerable<OliveType>类型,同时为执行创建/编辑/删除操作,视图还包含了指向操作的链接
l Reference script libiaries:指示创建的视图是否包含指向Javascript的文件集,当创建Create或Edit视图时,就需要选中这些
项,如果实现客户端的验证也必须选中这些项
Razor视图引擎
代码表达式
例:@{ string root=“Olive”;}
<span>@root.Models</span>
想要输出结果为<span>Olive.Models</span>
但是在实际的运行中会报错,提示string没有Models的属性,可以通过将表达式用圆括号括起来的方式进行解决,即:
<span>@(root).Models</span>
例:<li>Item_@item.Length</li>
期望的输出结果为<li>Item_3</li>
但是实际输出的是<li>Item_@item.Length</li>
出现这样的情况是因为Razor将其识别为邮箱地址了,
我们只需加上圆括号即可,如:<li>Item_@(item.Length)</li>
此外如下想要输出@号,可以使用两个@@用来转义
Html编码
在许多情况下需要用视图显示用户的输入,但是这样存在潜在的跨站脚本攻击,但是Razor表达式默认用HTML编码
如下:
@{string message=“<scritp>alert('Olive')</script>”;} <span>message</span>
这段代码则不会弹出提示框,显示如下:
<span><script>alert('Olive');<script></span>
- ASP.NET MVC3学习--视图和模型(1)
- ASP.NET MVC3学习--视图和模型(4)
- ASP.NET MVC3学习--视图和模型(2)
- ASP.NET MVC3学习--视图和模型(3)
- ASP.NET MVC3学习--视图和模型(5)
- ASP.NET MVC3学习心得-----视图和模型
- ASP.NET MVC3书店--第三节+视图与视图模型
- ASP.NET MVC3--视图
- ASP.NET MVC3 自动生成控制器和视图
- ASP.NET MVC3 匿名类型视图模型无法识别的解决方案
- Asp.net MVC3学习案例
- ASP.NET MVC3 学习笔记----HTML.Action()和HTML.RenderAction()
- Asp.net MVC3.0 入门教程之六—— 审视编辑方法和视图
- 检查编辑的方法和视图(ASP.NET MVC3系列文章六)
- ASP.NET MVC3 及其学习资源
- ASP.NET MVC2, MVC3 & VS2010学习
- ASP.NET mvc3.0 入手学习资料
- ASP.NET MVC3 快速入门-第三节 添加一个视图
- 像素,尺寸大小的转换
- local,LANG,LC_ALL详解
- 可见性设计
- IOS之多点触摸
- Nagios监控数据库的方法
- ASP.NET MVC3学习--视图和模型(1)
- 面向对象技术
- 奇偶校验码
- android系统中的多线程(一): 关于在android中启动线程以及线程间的交互
- C#设计模式之工厂模式(3)
- HDU 2002 计算球体积
- ThinkPHP学习笔记(六)实例化模型的四种方法
- Felsenstein's tree-pruning algorithm
- v4l2