一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 7
本文根据《Professional ASP.NET MVC 1.0》中微软牛人Scott Guthrie 提供免费下载的第一章,一步一步演示如何通过ASP.NET MVC 1.0 正式版创建NerdDinner 范例程序。对了解如何使用最新的ASP.NET MVC 1.0框架创建Web Application 非常有帮助。本文由
http://forum.entlib.com 开源论坛小组提供。关于本文的一些资源,请参考文章最后的链接。
前面系列文章:
本文继续学习之旅,一步一步通过ASP.NET MVC 1.0 实现NerdDinner 范例程序。
控制器和视图(Controllers and Views)
传统的Web框架,如ASP/PHP/ASP.NET Web Forms等等,请求的URL地址都是映射到特定的文件。如,请求的URL地址,像/Products.aspx或/Products.php,由Products.aspx或Products.php文件负责处理。
基于Web的MVC框架映射URL地址到服务器端代码有点不同,不是映射URL地址到特定文件,而是映射到类的方法上。这些类就是MVC中的Controller控制器,它们负责处理进来的请求和用户输入,接收和保存数据,并返回结果给客户端(显示HTML、下载文件、或重定向到不同的URL等等)。
现在,我们已经创建一个基本的model,下一步将添加控制器类到项目中,为Dinners网站用户提供数据列表显示和导航。
添加DinnersController控制器
右键点击Web项目中的Controllers文件夹,选择 Add ->Controller,如下图所示。
在弹出的Add Controller对话框,控制器名称输入DinnersController。点击Add按钮,在项目文件中添加DinnersController.cs文件。
添加Index() 和Details() 方法到DinnersController类
我们想让访问者使用我们的应用程序浏览即将到来的宴会列表,用户可以点击任一宴会Dinner查看详细的信息。应用程序将发布如下的URL地址:
/Dinners/ -- 显示即将来临的宴会列表。
/Dinners/Details/[id] – 显示特定宴会的详细信息,通过URL地址中的id参数来匹配数据库中的DinnerID。例如,/Dinners/Details/2 将在HTML页面显示DinnerID=2的详细信息。
下面,我们添加2个公共的action方法到DinnersController类中。
public class DinnersController : Controller
{
//
// GET: /Dinners/
public void Index()
{
}
//
// GET: /Dinners/Details/2
public void Details(int id)
{
Response.Write("<h1>Details DinnerID: " + id + "</h1>");
}
}
接下来,我们运行NerdDinner范例程序,通过浏览器调用方法。在URL地址栏输入/Dinners/将调用Index() 方法,并返回如下响应。
在地址栏输入/Dinners/Details/2,将触发Details() 方法运行,返回如下结果:
你可能想知道-ASP.NET MVC 怎么知道调用DinnersController控制器的这些方法?下面我们看看MVC 路由(routing)是如何工作的。
理解ASP.NET MVC Routing
ASP.NET MVC包含强大的URL路由引擎,提供了很好的灵活性来控制URL如何映射到控制器类。它允许我们完全定制ASP.NET MVC如何选择controller类,调用哪一个方法,以及从URL/Querystring中自动解析变量值,并作为参数传递给方法。ASP.NET MVC 路由也提供SEO(Search Engine Optimization)优化的灵活性。
默认情况下,新的ASP.NET MVC项目已经注册了预配置的URL路由规则,这样允许我们轻松启动应用程序,而不需要配置任何东西。可以在项目中的Application类中看到默认的路由规则注册。在范例项目的根目录,双击Global.asax文件。
默认的ASP.NET MVC路由规则注册在该类的RegisterRoutes() 方法中。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
上述调用的routes.MapRoute() 方法注册了一个默认的路由规则,映射请求的URL到controller类。使用的URL格式为:/{controller}/{action}/{id},这里controller 是指需要实例化的类名,action是将调用的公共方法的名称,id是一个可选的参数,嵌入在URL地址中,用来传递参数给方法。传递给MapRoute() 方法的第三个参数是一组controller/action/id默认值,在URL没有指定时,Controller=Home、Action=Index、Id=””。
下面这个表格演示URL地址如何使用默认的/{controller}/{action}/{id} 规则进行映射:
相关资源下载链接:
1. ASP.NET MVC 1.0 正式版发布了!!!
2. 免费ASP.NET MVC eBook 向导-电子书下载