2014-01-20 3 views
2

В проекте ASP.NET MVC4 у ​​меня есть подкаталог под названием App_Code (вручную созданный). Он содержит файлы .cs с классами в них. Я использую эти классы в нескольких разных файлах .cshtml. Файлы .cshtml компилируются и работают как ожидалось.Добавление классов в проект ASP.NET MVC4

Мои классы в пространстве имен:

namespace Foo { 
    public class Bar { 
     // ... properties 
    } 
} 

Я хочу использовать один из этих классов в контроллере:

using System; 
// ... 
using Foo; 

namespace MyProject.Controllers 
{ 
    public class MyController { 
     Foo.Bar SelectedBar { get; set; } 
    } 
} 

Когда я делаю это, я получаю ошибку компиляции:

Error 3 The type or namespace name 'Foo' could not be found (are you missing a using directive or an assembly reference?) 

Если я перемещаю файлы .cs в каталог контроллеров, то классы .cshtml не могут «видеть» их.

Как вы добавляете классы в проект MVC4? Должен ли я создавать второй проект?

Я занимаюсь C# уже много лет, но все это были Windows Forms и XAML. С ASP.NET я нахожусь на кривой обучения, как носорог на коньках.

+0

Что-то очень странное происходит с вашим проектом, если ваши представления могут «видеть» код только потому, что он находится в App_Data. Они должны иметь доступ только к пространствам имен, указанным в элементе файла web.config в папке «Представления». Аналогично, ваши контроллеры должны иметь доступ ко всему коду в вашем проекте, даже если это имя ранее специального типа, такое как App_Code. Этот проект начал свою жизнь как сайт, не относящийся к MVC? – Dave

+0

@Dave Я только что создал проект вчера. Я добавил пространство имен в верхний уровень web.config, но не тот, что был в Views. О чем я даже не подозревал. Derp. Не то чтобы это имело какое-то значение. –

ответ

1

App_Code используется обычными старыми веб-формами ASP.NET Веб-сайт проект. Когда вы размещаете свои классы там, они компилируются ASP.NET (а не Visual Studio, как в проекте MVC). В проекте веб-сайта вы в основном раскрываете свои кодовые файлы, а ASP.NET делает компиляцию для вас. При использовании MVC вы не можете создать проект веб-сайта, но вместо этого вы создаете проект, который скомпилирован перед развертыванием.

Если вы хотите использовать этот каталог в проекте MVC (не является предпочтительным), вы можете правой кнопкой мыши на файлы в App_Code и изменить Build Action от Content до Compile. (Таким образом, когда вы компилируете свой проект MVC, файлы из этого каталога будут взяты и скомпилированы в .dll внутри каталога bin).

Второй и, вероятно, более предпочтительный способ - организовать свои файлы по-разному. Например, в типичном проекте у вас могут быть такие каталоги, как /Infrastructure и /Models. Вы можете добавить отдельный проект Библиотеки классов для вашего бизнес-логического уровня и так далее.

+1

Я просвещен! Благодарю вас. –

5

Я предполагаю, что это объект модели, и вы можете добавить их в папку Model из вашего проекта.

Если вы хотите сделать свой проект более масштабируемым, вы можете создать отдельный проект библиотеки C# и добавить ссылку на свое приложение MVC.

Смежные вопросы