书呆子晚餐控制器

时间:2009-05-13 16:55:31

标签: asp.net-mvc asp.net-mvc-routing nerddinner

在此页面上:

http://nerddinnerbook.s3.amazonaws.com/Part4.htm

添加控制器后,我可以浏览http://localhost:xxxx/dinners并按预期工作。我的问题是如何使用“晚餐”? “晚餐”在哪里?我的控制器名为DinnersController,所以Dinners这个词是如何变得有意义的。我在Linq to SQL或其他任何地方都没有看到它。我敢肯定我忽略了一些显而易见的事情。

以下是代码:

    //
        // HTTP-GET: /Dinners/

        public void Index()
        {
            Response.Write("<h1>Coming Soon:
     

晚餐“);               }

        //
        // HTTP-GET: /Dinners/Details/2

        public void Details(int id)
        {
            Response.Write("<h1>Details DinnerID:
     

“+ id +”“);               }

“晚餐”来自哪里?

感谢您的帮助。

编辑:在我发布之前,我在文章中进一步阅读并了解了global.asax,但我不明白它是如何映射到晚餐的:

 public class MvcApplication : System.Web.HttpApplication
    {
        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
            );

        }

        protected void Application_Start()
        {
            RegisterRoutes(RouteTable.Routes);
        }
    }

3 个答案:

答案 0 :(得分:4)

ASP.NET MVC支持约定优于配置。这意味着它将查找具有Controller后缀的控制器,并且不将其作为URL的一部分包含在内,并且仅包含Controller的前缀。因此,如果您有HomeController,您可以访问/ Home /就像DinnersController意味着/ Dinners /。这是ASP.NET MVC框架本身的一部分。

如果您查看Global.asax中的默认路由,您会看到它使用的格式类似于......

"{controller}/{action}/{id}"

这意味着获取控制器的名称和操作的名称,并将请求指向该方法。

所以对于DinnersController Index动作方法,它看起来像/ Dinners / Index。

答案 1 :(得分:2)

我没有在我面前的示例,但我怀疑路由(请参阅Global.asax)设置为使用Dinners作为默认控制器名称;负责的具体行看起来像

new { controller = "Dinners", action = "Index", id = "" }

编辑:重新阅读问题,这并不能完全回答;您感到困惑的问题是/dinners已解决为DinnersController;没有任何默认行为。对于这种情况,Chad的答案是正确的,正如你所说的那样 - 框架基本上会切断Controller部分并找出要映射的名称。

答案 2 :(得分:1)

这是MVC通过其默认路由为您提供的“隐式配置”(约定与配置)的一部分。

当您访问“www.mysite.com/dinners”时,MVC将自动查看URL中的“晚餐”,并查找名为“DinnersController”的控制器并调用“索引”方法。如果您访问“www.mysite.com/dinners/details”,MVC会查找“DinnersController”并调用“详细信息”方法。

如果你看看rails上的ruby,它的行为方式大致相同(几乎可以肯定是微软从中得到的)。