.net中MVC的创建详解

上传人:飞*** 文档编号:45110089 上传时间:2018-06-15 格式:DOCX 页数:32 大小:174.16KB
返回 下载 相关 举报
.net中MVC的创建详解_第1页
第1页 / 共32页
.net中MVC的创建详解_第2页
第2页 / 共32页
.net中MVC的创建详解_第3页
第3页 / 共32页
.net中MVC的创建详解_第4页
第4页 / 共32页
.net中MVC的创建详解_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《.net中MVC的创建详解》由会员分享,可在线阅读,更多相关《.net中MVC的创建详解(32页珍藏版)》请在金锄头文库上搜索。

1、传统的 MVC 概念模型:组类,描述了要处理的数据以及修改和操作数据的业务规则视图:定义应用程序用户界面的显示方式控制器:一组类,用来处理来自用户,整个应用程序流以及特定应用程序逻辑的通信MVC 在 web 框架中的应用模型:模型是描述程序设计人员感兴趣问题域的一些类,这些类通常封装存储在数据库中的数据,以及操作这些数据和执行特定域业务逻辑的代码。在 ASP.NET MVC 中,模型就像是一个使用了某个工具的数据访问层,包括实体框架。视图:一个动态生成 HTML 页面的模板控制器:一个协调视图和模型之间关系的特殊类。它响应用户输入,与模型进行对话,并决定呈现哪个视图。约定优于配置控制器控制器M

2、VC 中的控制器主要用来响应用户的输入,并且在响应时通常会修改模型.通过这种方式 MVC 关注的是应用程序流.输入数据的处理.以及对相关视图输出数据的提供.在 MVC 中,URL 告诉路由机制去实例化哪个控制器,调用哪个操作方法,然后决定使用哪个视图.MVC 提供的是方法调用的结果,而不是动态生成的页面.整个项目的结构HomeControler:负责网站根目录下的”home page”和”about page”AccountControler:响应与账户相关的请求,比如登陆和账户注册public class HomeController : Controllerpublic ActionRes

3、ult Index()ViewBag.Message = “欢迎使用 ASP.NET MVC!“;return View();opublic ActionResult About()return View();这个类非常的简单,继承与 Controler 基类,HomeControler 类的 Index 方法负责决定当浏览网站首页时触发的事件。控制器一般以 Controller 结尾public class StoreController : Controller/ GET: /Store/public string Index()return “Hello from Store.Index

4、()“;public string Browse()return “Hello from Store.Browse()“;public string Details(string name)return “Hello from Store.Details():Name“+name;Controller URL 操作中的参数./Store/Browse?name=liuzhongdongpublic string Details(string name)return “Hello from Store.Details():Name“+name;Name 可以自动检测。return HttpUti

5、lity.HtmlEncode(“Hello from Store.Details():Name“+name);利用实用方法 HttpUtility.HtmlEncode 来预处理用户输入。这能阻止用户向视图中用链接注入JavaScript 代码或者 html 标记。也可以使用/Srore/Deatails/5,URL 路由可以自动检测到值。控制器就好像是浏览器再直接调用控制器类中的方法。类方法和参数都被具体化为 URL 中特定路径片段或查询字符串,结果就是一个返回给浏览器的字符串。这就进行了极大的简化,而忽略了下面这些细节:l 路由将 URL 映射到操作的方式l 将试图作为模板生成向浏览器返

6、回的字符串(通常是 html 格式)l 操作很少返回原始的字符串,它通常返回合适的 ActionResult 来处理像 HTTP 状态码和调用视图模板系统这样的事项。视图视图视图的职责是向用户提供用户界面。向它提供对模型的引用后,它会将模型转换为准备提供给用户的格式。在 ASP.NET MVC 中,这个过程由两部分组成。第一个部分是检查由控制器提交的ViewDataDictionary(通过 ViewData)属性访问。另外一部分是将其内容转换为 HTML 格式。视图并不一定只是渲染 html,视图还可以渲染其他的内容。从 ASP.NET MVC3 开始,视图数据可以通过 ViewBag 属性

7、访问。ViewBag 属性是动态的,它语法简单,可以通过访问 ViewData 属性访问的相同数据。它是一个高效地利用 C#4 中新的 dynamic 关键字的封装器,其中封装了 ViewData。这样就可以使用类似属性访问的方法来检索字典中的数据。所以 ViewBag.Message 就等同于 ViewData“Message”注意:如果在 ViewData“ this is a key”中存放一个值,那么将不能使用 ViewBag 访问这个值。另外应该知道的一点是,这个动态的值不能作为一个参数传递给扩展方法。因为 C#编译器为了选择正确的扩展方法,在编译时必须知道每个参数的真正类型。Htm

8、l.TextBox(“name“, (string)ViewBag.Name)或者Html.TextBox(“name“, ViewData“Name“);因为动态类型只有在编译时才确定。在强类型视图的情形下,ViewDataDictionary 拥有一个视图渲染的强类型模型对象。这个模型可能代表了实际的域对象,或者它可能是一个视图专有的呈现模型对象。为了方便起见,这个模型对象可以通过视图的 Model 属性进行引用。视图总是被一个控制器渲染,该控制器向它提供了要渲染的数据public ActionResult Details()ViewBag.Message = “Hello World.W

9、elcome to ASP.NET MVC“;return View();Layout = null;DetailsViewBag.MessageThis is a sample view.It is not much to look at,But is gets the job done.指定视图按照约定,每个控制器在 Views 目录下面都有一个对应的文件夹,其名称与控制器一样。只是没有Controller 后缀名。在每一个控制器的 View 文件夹中,每一个操作方法都有一个名称相同的视图文件与之对应。这就提供了操作方法与视图关联的基础。public ActionResult Detail

10、s()ViewBag.Message = “Hello World.Welcome to ASP.NET MVC“;return View();默认就会去对应的文件夹中找到与操作名称相同的视图。但是这个约定是可以重写的。return View(“Index“);使用上述方式,也只会在控制器对应的 View 文件夹里查找,如果要在不同的视图目录中查找,可以使用return View(“/Views/Store/Details.cshtml“);强类型视图强类型视图指给视图指定一个实体对象或者对象集合,也就是所谓的数据。那么视图这个时候就可以展现数据。实体类 PersonController 代码

11、public ActionResult Details()List persons = new List();persons.Add(new Person() PersonId=1, FirstName=“Liu“, LastName=“Zhongdong“ );persons.Add(new Person() PersonId = 2, FirstName = “Ma“, LastName = “Jun“ );persons.Add(new Person() PersonId = 3, FirstName = “Yang“, LastName = “Huan“ );persons.Add(n

12、ew Person() PersonId = 3, FirstName = “Zhou“, LastName = “Yajie“ );ViewBag.Persons = persons;return View();View 代码foreach (Person p in ViewBag.Persons)PersonId:p.PersonId FirstName:p.FirstName LastName:p.LastName这里传递类型到视图的方式是使用 ViewBag。然后在视图里面去迭代。可以使用 View 的重载方法传递模型实例来指定模型return View(persons);在后台,传进

13、 View 方法的值将赋给 ViewData.Model 属性。接下来是告诉视图那种类型的模型正在使用model 声明。注意,这里需要使用类型的完全限定名。using FirstMVCTest.Models;model IEnumerableforeach (Person p in Model)PersonId:p.PersonId FirstName:p.FirstName LastName:p.LastName对于在视图中经常使用的名称空间,一个比较好的方式就值在 Views 目录下的 web.config 文件中声明。视图模型视图通常需要显示各种没有映射到域模型的数据,例如,可能需要视图

14、来显示单个商品的详细信息,但是同以试图也要显示商品附带的其他信息,显示视图与主模型无关的额外数据的一种简单的方法就是把这些数据存放在 ViewBag 属性中,这样是可以实现的,但是并非对每一个人都实用,如果想要严格控制流进视图的数据,就必须使所有的数据都要强类型的。以便视图编写人员可以使用智能感知功能。可能采用的一个方法就是编写自定义的视图模型类,这里的视图模型不是 MVVM 里面的VM。这里的视图模型之的是视图特定模型。相当于为视图提供数据模型的类,而不是特定于域的模型。public class PersonSchoolViewModelprivate School _mySchool;pu

15、blic School MySchoolget return _mySchool; set _mySchool = value; private IEnumerable _persons;public IEnumerable Personsget return _persons; set _persons = value; View 里面要显示的就是既包括了 School 又包括 Person 的数据 添加视图1,在控制器的方法里面右键添加也可以在解决方案管理器中直接添加视图名称:指定视图的名称。视图引擎:指定是使用 aspx 或者 razor 渲染 view(生成 HTML)。创建强类型视图

16、:是否在创建视图的时候选择一个模型类支架模板:l Empty:创建一个空视图,使用model 语法指定模型类型l Create:创建一个视图,其中带有创建模型新实例的表单,并为模型类型的每一个属性生成一个标签和编辑器l Delete:创建一个视图,其中带有删除现有模型实例的表单,并为模型的每一个属性显示一个标签以及当前该属性的值l Details:创建一个视图,它显示了模型类型的每一个属性的标签及其相应值l Edit:创建一个视图,其中带有编辑现有模型的表单,并为模型的每个属性生成一个标签和编辑器l List:创建一个带有模型实例表的视图.为模型类型的每一个属性生成一列.确保操作方法向视图传递的是 IEnumerable类型.同时为了执行创建/编辑/删除操作,视图中还包含了指向操作的链接.创建为分部视图:选择这个选项意味着要创建的视图不是一个完整的视图,因此,layout 选项是不可用的.对于 Razor 视图引擎来说,生

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号