MVC学习笔记(1)

By | 2014年1月16日

该笔记是在学习MVC时,边看书边记下来的,对学习过程遇到一些概念和关键字有简单描述,从而了解到MVC大体的知识点,若要深入还需要进一步学习。

页面
1. ViewData 只存在与当前的HTTP请求中,跟Session不一样,不会将数据带到下一个HTTP请求。
2. TempData 类似于ViewData 却又不一样,基类:TempDataDictionary ;内部使用Session来存储数据, 生命周期为,一次请求
a) 备注:Return RedirectxxxxxResult 类时,TempData会强制保留, 若当前请求读取了数据,则当次请求中TempData的数据将会被清除. 否则保留到下一个页面.
3. MVC 通过 模型绑定(Model Binding)机制解析客户端传递过来的数据。 DefaultModelBinder 类
a) 简单模型绑定 Action参数名称 与HTML页面input标签 name一致时,自动绑定
b) FormCollection类 可以获取整个窗口传送过来的数据
c) 复杂模型 Action参数为自定义类型
4. 处理模型绑定时,会进行数据验证,验证失败 Controller的ModelState.IsValid 值为false
a) Html.ValidationMessageFor() 用来显示错误消息
b) 若使用验证,需要使用<% Using(Html.BeginForm() ) %>
c) ModelState.AddModelError() 用于输出自定义消息
5. Bind特性,可以限制Model要绑定的字段;可以应用于参数,也可以应用于model类上
6. TryUpdateModel(),UpdateModel() 可以再次执行模型绑定,目的是,对有些不显示的字段跳过验证。

7. 动作过滤器
a) 顺序: 授权 Authorization Filter ,动作 Action , 结果 Result , 异常 Exception,
b) 过滤器一律使用 Attribute的方式应用在Action之上
c) 也可以用在Controller中,表示应用在了Controller中所有的Action
d) Web.config 中的system.web类,的Authentication 下的 loginurl属性,可以设定当权限不足时,应该跳转的页面
授权过滤
8. Html.RenderAction() 可以在view中发出另一个子请求(Sub-request) 并在执行一次mvc流程,执行完毕后将HTML返回的 到View
a) ChildActionOnly特性 标示 不会被其他Http请求执行
9. RequireHttps特性
10. ValidateInput特性 关闭输入验证机制
11. ValidateAntiForgeryToken特性 为了预防跨站请求伪造的发生
a) View中使用 <%: Html.AntiForgeryToken() %>
b) Controller中的Action上 [ValidateAntiForgeryToken]

动作过滤特性
12. IActionFilter接口 OnActionExecuting , OnActionExecuted.
13. AsyncTimeout 特性
14. NoAsyncTimeout 特性
a) 以上2个特性,需要Controller继承自:AsyncController类

结果过滤特性
15. IResultFilter , OnResultExecuting , OnResultExecuted.
16. 实现输出缓存机制 [OutputCache]

异常过滤特性
17. IExceptionFilter, OnException()
18. 执行过程发生任何异常时,都会通过WebFormViewEngine类,寻找名为Error的视图.

VIEW相关技术
19. 2中从ACTION中获取数据方式:
a) 弱类型获取 页面继承自ViewPage
i. 转换对象时,记得引入命名空间
b) 强类型获取
HTML辅助方法
20. 生成页面元素方法

模拟HTTP动词
21. DELETE 动词 利用Http.HttpMethodoverride()

Dynamic Data对mvc的支持
23. 强类型视图下 <% Html.EnableClientValidation();%> <% Html.BeginForm() %> <%:Html.EditorForModel()%> 会自动生成对 强类型对象的编辑以及验证
URL辅助方法
24. Url.Action() –生成操作方法的完全限定 URL
25. Url.Encode() –将 URL 字符串中的特殊字符编码为字符实体等效项
26. Url.Content() –将虚拟(相对)路径转换为应用程序绝对路径。
27. Url.RouteUrl() –基于当前的路由系统,生成一个完全限定 URL

Ajax方法
28. 需要加载 MicrosoftAjax.js 以及 MicrosoftMvcAjax.js
29. Ajax.ActionLink()
30. Ajax.BeginForm()
31. 默认是Post方式

自定义HTML方法
32. 扩展方法:静态类,静态方法,第一个参数为(this HtmlHelper helper,……..)
TagBuilder类
33. 可以轻松快速的创建自定义HTML 方法。包含用于创建 HTML 元素的类和属性。
MasterPage模板
34. 继承自system.web.mvc.viewMasterPage

部分视图
35. /shared/目录下
36. 建立部分视图(.ascx)
37. 不需要建立相对应的ACTION ,因为仅仅是HTML片段
38. 页面中加载方式: <%Html.RenderPartial(“Name”); %>
39. 多个部分视图,共享ViewData,TempData 以及Model
40. 可使用JS 来加载部分视图, js 通过url.action(“block Name”) 调用Controller的Action方法,该方法返回 Partialview();
41. 也可以使用HtmlRenderAction() 该方法会对IIS再进行一次处理例程要求(通过Server.Execute()方法) ,因此该方法会重新执行Controller的执行过程。

Area的相关技术
42. 在同一个项目中切割出不同的mvc 网站
43. MapRout() 增加最末位参数为命名空间
44. 视图页面, 增加 area = “areaName”
45. 解决多人开发冲突,controller命名冲突

发表评论