一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 7


一步一步学习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()
        {
            Response.Write("<h1>http://forum.EntLib.com <br />开源ASP.NET、C#技术交流论坛</h1>");
        }
        //
        // 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} 规则进行映射:
 
 
今天就到这里了,明天继续翻译ASP.NET MVC eBook – 开发NerdDinner 范例程序向导。欢迎访问http://blog.EntLib.com 博客平台获取更多的MVC学习资料。
 
相关资源下载链接:
1. ASP.NET MVC 1.0 正式版发布了!!!
 
2. 免费ASP.NET MVC eBook 向导-电子书下载
 

 

发表 @ 2009年3月29日 22:26

打 印

评论

# re: 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 7

Left by cg516 at 2009/6/4 9:00
Gravatar
这文章到这里,怎么没人评论了,是不是都没出问题,就不写了?
好吧,我来抢个沙发。
最后那个段对Global.asax的解释,和那张表,非常好。
谢谢楼主。谢谢以往文章发问题的人,我也出现相同问题,依照大家的方法,都解决了。
2009-06-04

# re: 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 7

Left by wys at 2009/7/2 13:04
Gravatar
这一章讲的都还是蛮简单,没有什么问题。

# re: 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 7

Left by huihui at 2009/7/9 23:39
Gravatar
不知道怎么把/Dinners/Detaild/2中的Dinners与Controller Class 中的DinnersControl对应起来的?在哪对应的?

# re: 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 7

Left by test at 2009/7/16 14:23
Gravatar
为什么 /Dinners and /Home all map to Index()?

# re: 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 7

Left by kanne at 2009/7/16 16:55
Gravatar
ai 中文版的 using 好像有点问题 不晓得是不是 sp1 和 asp.net mvc的安装包的问题
反正得自己加上 有些东西

您的评论:



 (不显示)


 
 
 
Please add 7 and 7 and type the answer here:
    
 

评论预览窗口:

 
«二月»
31123456
78910111213
14151617181920
21222324252627
28123456
78910111213