Папка ASP.NET MVC 3 и App_Code

В ASP.NET Webform, App_Code является стандартной папкой для размещения кода и использования его во время выполнения. Но я думаю, что эта папка отличается от ASP.NET MVC, мой вопрос:

  • где я должен поместить свой код (методы расширения, Helpers,...) в ASP.NET MVC. Когда я храню код в папке App_Code, я не могу использовать тему в controller, но они отлично работают в views.

  • О Entity Framework, тот же вопрос, где я должен помещать файлы edmx и tt. Я не использую Code-First

Update:

После некоторого поиска, наконец, я создал новый проект Class Library в моем решении, код доступен во всех controllers и views. Я до сих пор не знаю, почему код в App_Code недоступен в контроллере

Ответы

Ответ 1

У меня была такая же проблема, мой класс Utility.cs не был распознан внутри моего проекта MVC. Я изменил "Контент контента" на "Компоновку" и решил проблему. Надеюсь, что это поможет.

Ответ 2

App_Code необходим в проектах веб-сайта, поскольку он имеет особое значение. Это означает: "Не обслуживайте эти файлы в веб-браузере". В ASP.NET MVC файлы в большинстве случаев напрямую не передаются браузеру, поэтому App_Code не требуется. Вы можете размещать файлы кода в любом месте в любой папке, потому что эти файлы скомпилированы в DLL и обычно не публикуются на самом веб-сайте.

Использование автономной библиотеки также является прекрасным решением.

Ответ 3

Я бы посоветовал начать с этот учебник. Сначала он использует EF-код, но вы можете просто заменить код первым DbContext стандартным edmx ObjectContext, если хотите (подсказка: папка Models).

App_Code относится к проектам веб-сайтов. ИМО, это ужасный способ организовать все, кроме самых простых веб-сайтов. Проект MVC - это проект веб-приложений, поэтому нет App_Code, и ваши классы могут быть определены практически где угодно.

Ответ 4

Никто не объясняет, почему App_Code существует в первую очередь. Это место, где вы помещаете файлы кода для получения динамической компиляции (во время выполнения). Это причина номер один для App_Code и почему она особенная. Вы можете поместить код в любую папку, которую хотите, но вам придется пометить его с помощью компиляции, чтобы компилировать в App_Code, что необязательно, на самом деле, большинство файлов в App_Code даже не являются частью проекта.

Он работает в проектах ASP.NET MVC, вам просто нужно называть файлы кода с расширением .cshtml.

Ответ 5

Ну, попробуйте загрузить некоторые уже существующие проекты с открытым исходным кодом. Один из них довольно сложный, но очень крутой, если вы поймете его - orchard

Лучшей практикой является перемещение этой логики в DAL (уровень доступа к данным) или BLL (уровни бизнес-логики). Зависит от сложности вашего приложения.

Ответ 6

Для тех, кто не хочет вторую библиотеку проектов/классов и просто хочет простую папку для нескольких классов С#, я предлагаю "App_Classes".