I:控制器和视图的基础概念
1.控制器的概念
控制器在ASP.NET MVC3当中是最终处理客户端请求的一个实现,他有个一硬性条件就是必须实现System.Web.Mvc.IController接口,而且类的命名必须要以Controller结尾,尽管按照硬性条件上来说,要自己实现一个接口比较纠结,但幸好的是在ASP.NET MVC3内部已经包含了一个默认的实现,我们只需要把类的命名设置为Controller结尾然后继承System.Web.Mvc.Controller类,立刻就可以轻松地实现了IController接口了.如果你不喜欢这种默认提供的实现方式,而是自己去实现IController的话.下面的代码可以做一个简单的参考:
- usingSystem.Web.Mvc;
- usingSystem.Web.Routing;
- namespaceMvcApplication1.Controllers
- {
- publicclassNoDefaultController: IController
- {
- voidIController.Execute(RequestContextrequestContext)
- {
- varhttpContext = requestContext.HttpContext;
- varresponse = httpContext.Response;
- response.ContentType = "text/html; charset=utf-8";
- response.Write("自己的简单实现! Hello World");
- }
- }
- }
请注意:控制器类不硬性要求放在*.Controllers命名空间中
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" width="561" height="441" src="/uploadfile/201301/7/4195018166.png" />
如果是使用继承默认的类去实现的话代码如下:
- usingSystem.Web.Mvc;
- namespaceMvcApplication1
- {
- publicclassHelloController: Controller
- {
- publicActionResultIndex()
- {
- returnContent("默认的实现! Hello World");
- }
- }
- }
效果图我就不发了.大家可以手动试一试.
2.视图的概念
视图的理解比较简单.你可以把视图理解为*.aspx或*.cshtml的文件.但是不是所有的aspx, cshtml文件都可以作为视图,它们必须得属于某一个以控制器名称命名的文件夹当中,而且要按照约定去存放到路径 ~/Views/{controller}/View.cshtml.
另外视图还包含解析他的ViewEngine(视图引擎),本文在这里不涉及这个高级话题.
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" width="433" height="607" src="/uploadfile/201301/7/4D95018709.png" />
我们可以看出在~/Views/{controller}/View.cshtml中的{controller}并不需要像类命名那样以Controller结尾去做文件夹名称.
3.工作原理图
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/7/5995018959.png" />
当然,内部的工作原理会比这个图复杂得多.在此也仅仅是让大家有个了解而已!如有错误请指出.谢谢!
提示:MvcHandler实现了IHttpAsyncHandler, IHttpHandler, IRequiresSessionState这三个接口,我在Debug进去的时候发现都是走异步的路线.对于这个处理方式,了解的人希望可以为我解答一下!
II:控制器
1.操作方法
操作方法的含义是指在继承了System.Web.Mvc.Controller类中所定义的返回值的类型可以兼容ActionResult的方法.
- usingSystem.Web.Mvc;
- namespaceMvcApplication1.Controllers
- {
- publicclassHomeController: Controller
- {
- ///<summary>
- ///Hi, 我是Index操作方法
- ///</summary>
- ///<returns></returns>
- publicActionResultIndex()
- {
- ViewBag.Message = "Welcome to ASP.NET MVC!";
- returnView();
- }
- ///<summary>
- ///厄, 我是About操作方法
- ///</summary>
- ///<returns></returns>
- publicActionResultAbout()
- {
- returnView();
- }
- ///<summary>
- ///可以为方法添加不是操作方法的特性
- ///</summary>
- ///<returns></returns>
- [NonAction]
- publicstringNonAction()
- {
- return"亲,不好意思噢.我不是操作方法噢,请不要乱调用噢!";
- }
- }
- }
- 同时也可以使用[ActionName(“重命名操作方法”)]特性去重命名操作方法.
- [ActionName("NewActionName")]
- publicActionResultRenameAction()
- {
- returnContent("利用特性换个马甲");
- }
4