问题:
传统的WebForm和MVC在执行过程上有什么区别?
传统WebForm的工作流程如下:
请求一个例如http://www.51mvc.com/blog/index.aspx的URL,那么我们的WebForm程序会到网站根目录下去寻找blog目录下的index.aspx文件,然后由index.aspx页面的CodeBehind文件(.CS文件)进行逻辑处理,其中或许也包括到数据库去取出数据(其中的经过怎样的BLL到DAL这里就不谈了),然后再由index.aspx页面来呈现给用户。
MVC的工作流程如下:
在MVC中,客户端的所请求的URL是被映射到相应的Controller去,然后由Controller来处理业务逻辑,或许要从Model中取数据,然后再由Controller选择合适的View返回给客户端。再说回前面我们运行的ASP.NET MVC程序访问的http://localhost:2176/Home/Index这个URL,它访问的其实是HomeController中的Index这个Action,见下图:
问题:
MVC的访问路径是什么含义?
在ASP.NET MVC默认的视图引擎(WebFormViewEngine)下,view是按如下路径访问的:
/Views/{Controller}/{Action}.aspx
注:这个很重要,和传统的WebForm是很不一样的,这里面是控制器名和动作名,而传统的是文件夹名和网页文件名。
问题:
MVC中如何控制哪个页面显示?
一个是默认的,相当于主页:
可以指定:
在Global.asax文件中的RegisterRoutes()方法:
routes.MapRoute("Home", "", new { controller = "Home", action = "Index", });
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
二是超链接方式:
在view文件中指定:
@Html.ActionLink("修改", "edit", new { id=item.UserId }) |
也可以写成<a href=”/user/[email protected]”>修改</>
以上两种方式功能是一样的,只是第一种方法相对来说多一点点开销。
问题:
关于action的特性:
请求的方式:
[AcceptVerbs("GET")]
方法动作有PUT,GET,POST,HEAD等,这些参数是限制的。
GET:请求的数据随HTTP请求头发过去
POST:请求的数据在HTTP请求头发过去之后再发过去
PUT:用于上传数据
方法的重命名:
[ActionName("Setting")]
这个里面的参数是可以自定义的。
问题:
action的返回值
ActionResult
Action方法返回ActionResult类型的结果。ASP.NET MVC为我们提供了几种ActionResult的实现,如下: