您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > ASPNet-MVC
Asp.netMVCAsp.netMVC简介•Asp.NetMVC模式是一种表现模式。(在UI层,与“三层架构”没有关系,”三层架构”是一种“架构模式”)•Asp.netMVC中的三种角色–Model:用于存储数据的组件。–View:根据Model数据进行数据展示的组件–Controller:接受Url,操作Model,并选择View•Asp.netMVC是一个开源项目。•Asp.netMVC的目的不是取代WebForm,只是asp.net平台下开发的另外一种选择。为什么用asp.netmvc•Asp.netMVC与WebForm1.WebForm优点:1.将开发抽象成组件模型。2.使用方便,入门容易3.有大量的控件(包括第三方控件)。2.WebForm的缺点:•封装太强,还是web开发吗?–web开发本质:请求与响应–前台aspx代码与后台cs代码关联太紧密–很多底层东西,初学者不明白。•入门容易,学精难–需要深入了解“生命周期模型”、各种事件等。–前台与后台不易配合,单元测试不方便•控件使用起来不灵活,控件组件对于HTML的控制不够直接或太过复杂。•ViewState问题(容易导致超大控件,使程序失控)Asp.netMVC的优势•web开发还是web开发:请求与响应(很直接)。•后台代码与前台展示页面彻底分离。–易于单元测试–易于前后台人员合作开发•易于维护•可以完全控制HTTP的输出内容•开源•优秀的开发效率准备•开发环境–VS2010(MVC2.0)–VS2008需要手动安装MVC2.0•MVC3.0已经发布,但是目前用的最多的是MVC2.0WebForm的请求执行过程新建一个WebForm项目,演示。Asp.netMVC“HelloWorld”•新建一个asp.netmvc项目,显示HelloWorld!(建一个空mvc项目)注意浏览器缓存与重新编译项目。Controller、Model与View的关系Asp.netmvc目录介绍与核心dll•Content——存放应用需要的一些资源文件,如图片、CSS等。•Controllers——存放控制器类。•Models——存放业务模型组件。•Scripts——存放JavaScript脚本文件。•Views——存放视图文件(视图文件必须存放到这个文件夹下)。核心dll•System.Web.Routing:–URL路由。将一个URL路由到对应的Controller上靠的就是这个。是在HttpModule里面处理的。•System.Web.Extensions:–这个是ASP.NETAJAX的。•System.Web.Mvc:–ASP.NETMVC最主要的程序集。在CodePlex上放出源代码的就是这个DLL。•System.Web.Abstractions:–这个程序集是一些相关的基类来的。例如HttpContextBase、HttpRequestBase等等。•Microsoft.Web.Mvc:–这个程序集只要放一些MVC的特性与扩展的方法。在ASP.NETMVCbeta版中,这个DLL已经被移除,但是如果你需要用到这个DLL的功能,可以到这里下载并引入就可以了。问题•Asp.net是如何找到对应aspx文件并显示的?–路由System.Web.Routing.dll–路由规则(稍后介绍,先看看Controller与View)“约定”大于“配置”•Controller放到controllers文件夹中,并且命名方式以XxxController结尾•每个Controller都对应View中的一个文件夹,文件夹的名称跟Controller名相同•Controller中的方法名都对应一个View(非必须,但是建议这么做)而且View的名字跟Action的名字相同•MVC的约定,Action返回View时自动去Views文件夹中搜索其名子与请求的action相同的View,如果没有会去Share文件夹下去搜索。(演示)Asp.netmvc开发流程:Asp.netMVC中各组件的关系1.Model、Controller、View三者是并行的关系,与三层架构中的相互依赖不同。2.Model、Controller、View相互独立,谁都不依赖与谁而存在,各个组件是互相协作的关系。Asp.netMVC与三层架构•MVC是表现模式•三层架构是架构模式•不是一回事查看示例项目•新建一个非空asp.netmvc项目,查看示例项目。分析示例asp.netmvc项目。Asp.netMVC中的一些类•Url驱动,根据用户输入的url来找具体的类(反射)。•XxxController–每个XxxController都继承自Controller(抽象类)•ActionResult(抽象类)–实现ActionResult类的子类Asp.netMVC中的一些类•ViewPage–每个View页面都继承自ViewPage,每个view页面,都会自动生成一个类(类似于:IndexASP.views_stus_index_aspx–)继承自ViewPageController常用方法-属性•View();//创建一个ViewResult来呈现视图。•RedirectToAction()//与View的区别,RedirectToAction会执行Action中的代码。•Redirect()//重定向到指定的Url•Content()//使用字符串创建一个结果对象。•File()//创建一个FilePathResult对象•Json()//创建一个将指定对象序列化为JavaScript对象表示法(JSON)的System.Web.Mvc.JsonResult对象。//[HttpPost]•PartialView()//相当于用户控件ascx(当在页面中需要局部刷新时,一般会采用Ajax方法某个Action返回json格式数据,然后客户端解析填充(这样相对操作比较麻烦)。这时,可以考虑在Action中returnPartialView();然后客户端可以直接把返回的全部数据填充。(当数据量不是非常大时可以使用,如果数据量非常大,则还应考虑json,毕竟传输的数据会少些。)•ViewData属性(来自:ControllerBase,ViewDataDictionary类型)–传递数据的两种方式:•ViewData[“key”]//弱类型•ViewData.Model//强类型•TempData//可以跨Action访问数据,存储在Session中,数据在被请求过一次后自动删除(只能被请求一次。)–在同一个Controller中如果用RedirectToAction(“actionName”);的方式来转到另外一个Action的时候ViewData中的数据已经丢失,如果是直接调用当前类中的另外一个Action方法,则可以保留ViewData中的数据,但需要注意的是returnView(“ViewName”);,需要指定转向的View名字,否则returnView()会转向用户当前请求的action对应的View。•ModelState提交表单时验证用。(后面讲)ViewPage类常用成员•ViewData属性•Model属性•Url属性–UrlHelper类–常用方法:•Content(“相对路径”);//见备注1。注意路径必须包含”~”•Action(“actionName”);//返回指定action对应的完全限定url.见备注2.•Encode(url);//对Url编码。•Html属性(HtmlHelper类)–System.Web.Mvc.HtmlHelper–System.Web.Mvc.HtmlHelperT•Ajax属性:–示例:ajax提交表单。HtmlHelper类的扩展方法类HtmlHelper----DropDownList•varitems=newListSelectListItem()•{•(newSelectListItem(){Text=001,Value=1,Selected=false}),•(newSelectListItem(){Text=002,Value=2,Selected=false})•};•将items值给ViewData:•ViewData[items]=items;••在aspx中这样使用:•%:Html.DropDownList(items)%••生成的代码中,items将作为select标签的name和id值。HtmlHelper-----RadioButton•%:Html.CheckBox(“bookType”)%在Controller获取提交的值为(true,false)未操作true选择false不选择三种•RadioButton第一个参数为控件名字(名字相同说明为同一个Group),返回值为第二个参数(红色部分)%:Html.RadioButton(favColor,Blue,true)%Bluebr/%:Html.RadioButton(favColor,Purple,false)%Purplebr/%:Html.RadioButton(favColor,Red,false)%Redbr/%:Html.RadioButton(favColor2,Orange,false)%Orangebr/%:Html.RadioButton(favColor2,Yellow,false)%Yellowbr/%:Html.RadioButton(favColor2,Brown,false)%Brownbr/%:Html.RadioButton(favColor2,Green,false)%GreenHtmlHelper-----RenderPartial•%Html.RenderPartial(SomeControl.ascx,ViewData.Model);%•这个方法通过接受用户控件的文件名以及相应的可变化的数据进行用户控件的呈现•可重用用户控件显示到具体的页面中HtmlHelper---RenderAction代码实例:%Html.RenderActionMyController(x=x.ControllerAction());%优点:•让控制器做它该做的事情:组织逻辑及与业务逻辑之间的通信。•将实际使用的视图/用户控件抽象出来,便于未来的重构。•将控制器中的业务逻辑抽象出来,这也让你的业务逻辑可以专心做它该做的事。•使用lambda表达式,强类型HtmlHelper-----Form•方式一:{}%using(Html.BeginForm(HandleForm,Home))%%{%!--Formcontentgoeshere--%}%•方式二:BeginEnd%Html.BeginForm();%!--Formcontentgoeshere--%Html.EndForm();%快速实现一个学员表的CRUD•Create•Read•Update•Delete服务器端表单验证1-手动写验证代码•新建一个带实体类的表单(强类型的)来演示。•在Action中:–ModelState.AddModelError(“LoginId,errorone);–然后判断ModelState.IsValid,默认IsValid为true,当AddModelError()后IsValid为false–If(ModelState.IsValid==false){returnView(Model);//还是返回原来的View}•在View中:–%=Html.ValidationMessage(“LoginId”)%//在需要显示错误的地方,写这句话。就像asp.netwebform中的验证控件一样。当在Action中AddModelError(“Logi
本文标题:ASPNet-MVC
链接地址:https://www.777doc.com/doc-4524655 .html