Контроллеры Обеда Ботаника - PullRequest
0 голосов
/ 13 мая 2009

На этой странице:

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 ]

4 голосов
/ 13 мая 2009

ASP.NET MVC поддерживает Конвенцию вместо Конфигурации. Это означает, что он будет искать контроллер с суффиксом Controller и не будет включать его в качестве части URL-адреса, а будет включать только префикс Controller. Так что если у вас есть HomeController, вы можете посетить / Home / так же, как DinnersController означает / Dinners /. Это происходит как часть самой инфраструктуры ASP.NET MVC.

Если вы посмотрите на маршрут по умолчанию в Global.asax, вы увидите, что он использует формат для URL, который выглядит как ...

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

Это означает, что нужно взять имя контроллера и имя действия и направить запрос на этот метод.

Так что для метода действия DinnersController Index это будет выглядеть как /Dinners/Index.

2 голосов
/ 13 мая 2009

У меня нет сэмпла передо мной, но я подозреваю, что маршрутизация (см. Global.asax) настроена на использование Dinners в качестве имени контроллера по умолчанию; конкретная ответственная строка будет выглядеть примерно так:

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

Редактировать: Перечитывая вопрос, это не совсем отвечает; проблема, с которой вы были сбиты с толку, заключается в том, что /dinners было решено до DinnersController; не любое поведение по умолчанию. В этом случае ответ Чада верен, и, как вы сказали, фреймворк в основном отсекает часть Controller и определяет, какое имя отобразить.

1 голос
/ 13 мая 2009

Это часть «неявной конфигурации» (Соглашение или Конфигурация), которую MVC предоставляет вам через маршруты по умолчанию.

Когда вы перейдете на «www.mysite.com/dinners», MVC автоматически увидит «dinners» в URL-адресе, найдет контроллер с именем «DinnersController» и вызовет метод «Index». Если вы перешли на «www.mysite.com/dinners/details», MVC будет искать «DinnersController» и вызывать метод «Details».

Если вы посмотрите на ruby ​​на рельсах, он ведет себя примерно так же (почти наверняка откуда Microsoft это взяла).

...