Должен ли я вызывать каждый из моих просмотров MVC Index.aspx? - PullRequest
2 голосов
/ 22 января 2009

Если я не ошибаюсь - соглашения ASP.NET MVC, кажется, хотят, чтобы я сделал следующее для представления контроллера.

Сегодня я создаю каталог «Продукты», в который помещаю свое представление «Индекс». Затем я создаю «ProductsController» и создаю для него метод «Index», который возвращает представление. Возврат только View () без аргументов приведет к извлечению страницы «Index.aspx», поскольку она имеет то же имя, что и метод.

 public class ProductsController : Controller
    {
        public ActionResult Index()
        {
            return View();   // looks for Index.aspx in Products directory
        }
    }

Теперь это просто отлично. НО я получу миллиард страниц Index.aspx, и я один из тех, кто никогда не закрывает файлы, поэтому я сойду с ума.

В качестве альтернативы я могу создать Products / Products.aspx и изменить свой контроллер на следующее:

 public class ProductsController : Controller
    {
        public ActionResult Index()  // my default routing goes to Index (from sample project)
        {
            return View("Products");
        }
    }

Я понимаю, как это работает, и что это вполне нормально в схеме проектирования MVC, чтобы сделать это. Это не хак или что-то в этом роде.

Моя проблема (после прослушивания этого видео PDC) заключается в том, что в MVC предпочтительнее соглашение о настраиваемости (или любой другой правильной фразе).

Так что мне интересно, если я пропускаю третий способ, или люди просто в порядке с 50 вкладками индекса в Visual Studio?

Ответы [ 3 ]

2 голосов
/ 22 января 2009

Я думаю, что вы должны назвать метод после действия и дать имя представлению (если оно имеет смысл и не разделяется между действиями, то же самое, что и действие). Вам, вероятно, следует изменить механизм маршрутизации, так как Index на самом деле не является описательным именем. Имя действия должно представлять, что оно делает (как любой метод), и не должно быть жестко закодировано в Index или что-то в этом роде. Вместо этого следует отредактировать маршрут.

2 голосов
/ 23 января 2009

Наличие действия по умолчанию для каждого контроллера с одинаковым именем просто упрощает маршрутизацию (проверьте global.asax). Кроме того, все вещи («Продукты», «Книги», «Контакты», ...) используют действия / представления с одинаковыми именами для одной и той же функции, после чего код становится намного проще для навигации и понимания. Такое использование соглашения особенно важно при работе в команде, поскольку оно поощряет согласованность кода между разработчиками.

Глядя на другой вопрос, я наткнулся на SimplyRestfulRouting в проекте MVCContrib на codeplex. Это может дать вам некоторые идеи.

0 голосов
/ 22 января 2009

Это просто шаблон. Используйте шаблон, но сделайте так, чтобы он работал на вас. Лично мне нравится, когда мои представления называются по их функциям, и у меня не так много страниц Index.aspx, потому что у меня немного индексов.

...