MVC笔记

 学习软件平台:vs2008 、 vs2008 sp1 、mvc 1.0 rc2 1、传统的Web 框架,如ASP/PHP/ASP.NET Web Forms 等等,请求的URL 地址都是映射到特定的文件,基于Web 的MVC框架映射URL地址到类的方法上。这些类就是MVC 中的 Controller 控制器,它们负责处理进来的请求和用户输入,接收和保存数据,并返回结果给客户端(显示HTML、下载文件、或重定向到不同的URL 等等)。 2、理解ASP.NET MVC Routing 3、在DinnersController 的action 方法中仅仅出来业务和数据逻辑,并将相关的 数据传递给单独的视图(view)模板,view 负责生成HTML 展示。 将控制器controller 逻辑和视图view 展示分开带来很多好处,尤其是它帮助清晰隔离了应用程序代码和用户界面展示的脚本。这可以非常方便地对应用程序逻辑进行单元测试,而不需要UI 展示逻辑,也可以方便修改UI 脚本,而不会更改应用程序的代码,当然也有助于开发人员和用户界面设计人员在项目中的合作 4、对于mvc beta版注意:当添加不上视图模板的时候。修改以下设置。英文版的不用管,中文版的要改下,很简单, x:/Program Files/Microsoft Visual Studio 9.0/Common7 /IDE/ItemTemplates/CSharp/Web/MVC/1033 x:/Program Files/Microsoft Visual Studio 9.0/Common7 /IDE/ItemTemplatesCache/CSharp/Web/MVC/1033 这两个目录建立2052的文件夹,,将1033的内容拷贝的2052中去, 运行x:/Program Files/Microsoft Visual Studio 9.0/Common7/IDE/devenv.exe /setup 5、对于mvc beta版注意:解决Could not load type System.Web.Mvc.ViewPage<…> 的错误未能加载类型“System.Web.Mvc.ViewPage”。 在view层下的web.config 节中,必须添加以下节 Code 6、ASP.NET MVC 在解析一个视图模板时,首先检查/Views/[Controller] 特定目录,如果找不到,则继续到/Views/Shared 子目录中寻找。 7、

ó

ó

8、以获取表单参数值。一个简单的办法是使用Controller 基类的Request 属性来访问form 集合,并直接获取提交的参数值: [AcceptVerbs(HttpVerbs.Post)] public ActionResult Edit(int id, FormCollection formValues) {...} 更好的方法是使用Controller 基类的内置方法UpdateModel()。该方法支持使用传入的表单参数更新对象的属性,它使用反射机制来解析对象的属性名称,接着基于客户端传入的参数值自动赋值给对象相关属性。 Edit(int id, FormCollection formValues) { Dinner dinner = dinnerRepository.GetDinner(id); UpdateModel(dinner); dinnerRepository.Save(); } 9、理解ModelState 和验证HTML辅助方法: Controller 类有一个ModelState 属性集合,可以用来提示传递到视图的model 对象是否有错误。ModelState中Error 记录识别模型属性的名称和错误信息,并允许指定友好的错误信息。 在UpdateModel() 辅助方法给model 对象的属性赋值时,如遇到异常或错误,会自动写道ModelState集合中。 1默认的CSS 错误类 – input-validation-error 定义在/content/site.css 2Html.ValidationMessage() 辅助方法, 上述代码输出: The value ‘BOGUS' is invalid =》 3Html.ValidationSummary() 辅助方法将呈现总结的错误消息,通过
    元素列出在ModelState 集合中所有详细的错误消息: 10、在HTTP-POST 的Create 方法中,有很多办法可以访问表单提交过来的参数值。 1、一个方法是创建新的Dinner 对象,并使用UpdateModel() 辅助方法,添加Dinner 对象到DinnerRepository,并持久化到数据库。这种方法会报id为空的错,还没有找到解决出错的原因 2、Create() action 方法接收一个Dinner 对象作为方法参数。接着ASP.NET MVC 自动实例化一个新的Dinner 对象,并使用表单输入的参数赋值给Dinner 对象的属性,然后传递给action 方法 11、基于用途来锁定绑定p67(限定修改字段) string[] allowedProperties = new[]{ "Title","Description", "ContactPhone", "Address", "EventDate", "Latitude", "Longitude"}; UpdateModel(dinner, allowedProperties); 基于类型来锁定绑定p68 12、所有的验证和业务规则都在模型层(Model Layer)中定义 – 而不是在Controllers 控制器和View 视图中。Controller 类和View 视图模板都不必了解模型类实现的业务规则。 13、ViewData 和ViewModel、定制ViewModel类:业务模型对象 和View 视图中的用户界面元素不一致,一个中介的定制ViewModel 类就可以发挥作用了。 14、使用ViewData 字典、Partial View 模板 15、在URL中添加page参数值 upcomingDinners.Skip((page ?? 0) * pageSize) .Take(pageSize) .ToList(); 添加页面导航界面 16、认证和授权 action 过滤器: [Authorize(Users="scottgu,billg")]/[Authorize(Roles="admin")] 17、Ajax.ActionLink() 辅助方法是ASP.NET MVC 内置的,进行AJAX 调用一个action 方法。AjaxOptions 参数表示接收action方法返回的内容,并更新页面中id 为 rsvpmsg 的
    元素。 Ajax.ActionLink( "RSVP for this event","Register", "RSVP", new { id=Model.DinnerID },new AjaxOptions { UpdateTargetId="rsvpmsg"}) AjaxOptions 对象公开了OnSuccess,OnBegin、OnFailure 和OnComplete 事件(见details.aspx页) 安装了VS 2008 SP1 的JavaScript 智能提示补丁,下载http://tinyurl.com/vs2008javascripthotfix 18、在数据库和仓储中实现位置搜索 我们可以使用SQL 2008 提供的geospatial 特性来实现,或者使用Gary Dryden 提供的SQL 方法,参见文章: http://www.codeproject.com/KB/cs/distancebetweenlocations.aspx 以及Rob Conery 在博客中提出的使用LINQ to SQL 方式:http://blog.wekeroad.com/2007/08/30/linq-and-geocoding/。 19.实现基于JSON 的AJAX搜索Action方法 20、测试 使用AAA 测试模式创建测试方法 – 分别代表Arrange、 Act 和Assert: Arrange – 设置测试单元; Act – 执行测试单元,并捕获结果; Assert – 验证执行行为; 21、避免在测试过程中使用真实的数据——“依赖注入(Dependency Injection)”设计模式 Mocking Framework 可以帮忙我们动态创建虚假的依赖对象,支持测试工 开源的Mocking Framework – Moq,可以从如下地址免费下载:http://www.mockframeworks.com/moq 在NerdDinner.Tests 项目中添加对Moq.dll 程序集的引用 注: 项目源代码下载 aspnetmvc-stepbystep 教程 宁可去碰壁,也不在家面壁;缘于自然,顺其自然。
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值