0

在本页面:

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);
        }
    }
4

3 回答 3

4

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

如果您查看 Global.asax 中的默认路由,您会发现它使用的 URL 格式看起来像......

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

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

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

于 2009-05-13T16:57:26.147 回答
2

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

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

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

于 2009-05-13T16:58:42.153 回答
1

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

当您转到“www.mysite.com/dinners”时,MVC 将自动在 URL 中看到“dinners”,并会查找名为“DinnersController”的控制器并调用“Index”方法。如果您访问“www.mysite.com/dinners/details”,MVC 将查找“DinnersController”并调用“Details”方法。

如果您查看 ruby​​ on rails,它的行为方式大致相同(几乎可以肯定,这就是 Microsoft 的来源)。

于 2009-05-13T17:01:25.267 回答