Ответ 1
У меня была такая же проблема, мой класс Utility.cs не был распознан внутри моего проекта MVC. Я изменил "Контент контента" на "Компоновку" и решил проблему. Надеюсь, что это поможет.
В 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
недоступен в контроллере
У меня была такая же проблема, мой класс Utility.cs не был распознан внутри моего проекта MVC. Я изменил "Контент контента" на "Компоновку" и решил проблему. Надеюсь, что это поможет.
App_Code необходим в проектах веб-сайта, поскольку он имеет особое значение. Это означает: "Не обслуживайте эти файлы в веб-браузере". В ASP.NET MVC файлы в большинстве случаев напрямую не передаются браузеру, поэтому App_Code не требуется. Вы можете размещать файлы кода в любом месте в любой папке, потому что эти файлы скомпилированы в DLL и обычно не публикуются на самом веб-сайте.
Использование автономной библиотеки также является прекрасным решением.
Я бы посоветовал начать с этот учебник. Сначала он использует EF-код, но вы можете просто заменить код первым DbContext
стандартным edmx ObjectContext
, если хотите (подсказка: папка Models).
App_Code
относится к проектам веб-сайтов. ИМО, это ужасный способ организовать все, кроме самых простых веб-сайтов. Проект MVC - это проект веб-приложений, поэтому нет App_Code
, и ваши классы могут быть определены практически где угодно.
Никто не объясняет, почему App_Code существует в первую очередь. Это место, где вы помещаете файлы кода для получения динамической компиляции (во время выполнения). Это причина номер один для App_Code и почему она особенная. Вы можете поместить код в любую папку, которую хотите, но вам придется пометить его с помощью компиляции, чтобы компилировать в App_Code, что необязательно, на самом деле, большинство файлов в App_Code даже не являются частью проекта.
Он работает в проектах ASP.NET MVC, вам просто нужно называть файлы кода с расширением .cshtml.
Ну, попробуйте загрузить некоторые уже существующие проекты с открытым исходным кодом. Один из них довольно сложный, но очень крутой, если вы поймете его - orchard
Лучшей практикой является перемещение этой логики в DAL (уровень доступа к данным) или BLL (уровни бизнес-логики). Зависит от сложности вашего приложения.
Для тех, кто не хочет вторую библиотеку проектов/классов и просто хочет простую папку для нескольких классов С#, я предлагаю "App_Classes".