在 Visual Studio 中的文件菜单中依次为“新建”——>“项目”
然后进入如下版面:
设置好之后,点击确定,
点击ok,一个新的mvc项目已经建好了。
当我们建立一好个mvc的项目的时候,vs会自动的生成几个文件夹
这几个文件夹得作用如下表所示:
文件夹 |
功能 |
/Controllers |
控制器接受来自浏览器的请求,进行处理,然后向用户返回回应 |
/Views |
视图文件夹保存用户界面的模板 |
/Models |
这个文件夹定义处理的数据 |
/Content |
我们的图片,CSS以及其他任何的静态内容放在这里 |
/Scripts |
放置脚本文件 |
/App_Data |
数据库文件 |
由于这是一种约定,许多程序员都遵守这个约定,建议大家写程序时也遵从这个约定
写过asp.net webform程序的人应该都知道,在webform的网站下,客户端的请求是在浏览器的地址栏中输入url地址会直接映射到我们网站中的相应的文件从而实现了浏览也页面或者是下载相应的文件。但是在asp.net mvc下我们会看到,客户端的url不会映射到我们的文件,而是直接会映射到相应的控制器下的类的方法上,通常我们将这种类的方法称为Action,然后将相应的请求传递回客户端,为了验证这个,摘录了一下音乐商店的测试代码,在 Controllers文件夹->HomeController.cs中我们修改一下Index()方法。
原来的程序是这样的:
public ActionResult Index() { return View(); }
将其改为:
public string Index() { return "这是index Action返回的数据"; }
点击运行,页面的显示结果为:
由此可以证明页面的url映射到HomeController.cs下的Index()的方法
打开 Global.asax.cs 文件,可以看到如下的代码:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Mvc; 6 using System.Web.Routing; 7 8 namespace music_store 9 { 10 // Note: For instructions on enabling IIS6 or IIS7 classic mode, 11 // visit http://go.microsoft.com/?LinkId=9394801 12 13 public class MvcApplication : System.Web.HttpApplication 14 { 15 public static void RegisterGlobalFilters(GlobalFilterCollection filters) 16 { 17 filters.Add(new HandleErrorAttribute()); 18 } 19 20 public static void RegisterRoutes(RouteCollection routes) 21 { 22 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 23 24 routes.MapRoute( 25 "Default", // Route name (路由名称) 26 "{controller}/{action}/{id}", // URL with parameters (带有参数的url地址的形式) 27 new { controller = "Home", action = "Index", id = UrlParameter.Optional } //Parameter defaults (设置默认值) 28 ); 29 30 } 31 32 protected void Application_Start() 33 { 34 AreaRegistration.RegisterAllAreas(); 35 36 RegisterGlobalFilters(GlobalFilters.Filters); 37 RegisterRoutes(RouteTable.Routes); 38 } 39 } 40 }
在此我们知道请求地址可以看成三部分:{controller}/{action}/{id},第一部分是控制器,如果没有,就会默认为Home,第二部分称为 Action 方法,如果没有提供的话,默认为 Index, 第三部分称为 id, 通常用来提供数据的标识,没有默认值。这就可以解释上一张图片中当用"localhost:2269"时为什么会执行HomeController.cs下的Index()方法了,这个地址相当于:
localhost:2269/Home/Index
就会相应的映射到Home控制器下的Index的Action即HomeController.cs下的Index()方法。
于此同时,可以用路由来实现url友好化:详细请看别人写的这篇文章:ASP.NET MVC3 系列教程 - URL友好化的重型武器[路由]
为了测试,我们更改HomeController.cs下的Index()方法,更改之后为:
public string Index(string id) { return "this is the parameter "+ id ; }
为了防止用户的脚本注入攻击,列如:/home/Index?id=<script>window.location=’http://hackersite.com’</script>.我们用HttpUtility.HtmlEncode()来处理用户输入,将代码改为:
1 public string Index(string id) 2 { 3 return HttpUtility.HtmlEncode("this is the parameter "+ id) ; 4 }
效果图:
ASP.NET MVC 默认的路由约定会将跟在 Action 方法之后的部分看作名为 ID 的参数的值,如果你的 Action 方法有一个名为 ID 的参数,那么,ASP.NeT MVC 就会自动将这部分作为参数传送给 Action 方法。
这些都是通过音乐商店文档学到的,大家可以参考音乐商店文档说明。上文所写均是在自己理解理解下所写并且测试的,如有不对的地方,敬请拍砖