Как настроить или указать папку контроллеров для ASP.NET MVC, чтобы использовать вместо папки контроллеров по умолчанию в? - PullRequest
6 голосов
/ 09 июня 2009

Я использую VS2008 и .net 3.5. Я создал библиотеку классов (Myproject.Controllers) в моем решении. Под этим классом я добавил папку Controllers. И в папке я добавил MyController, который объявлен как открытый класс MyController: контроллер

Мои просмотры все еще находятся в папке Представления по умолчанию. Теперь, когда я запускаю это в VS, я получаю сообщение в Default.aspx.cs: {"Не удалось найти контроллер для пути '/' или он не реализует IController."}

Если я помещаю копию моего MyController в папку Controllers по умолчанию, тогда она работает нормально. Кто-нибудь знает, как я могу установить / настроить путь контроллеров? Я искал в Интернете и ничего не нашел для этого. Спасибо.

Ответы [ 4 ]

1 голос
/ 09 июля 2010

Создавая собственную фабрику контроллеров, вы можете точно указать, как используются контроллеры. Вот как

шаг 1 - создать класс и извлечь его из IControllerFactory

http://msdn.microsoft.com/en-us/library/system.web.mvc.icontrollerfactory_members.aspx

шаг 2 - использование новой фабрики контроллеров при запуске приложения

ControllerBuilder.Current.SetControllerFactory(typeof(MyControllerFactory));

IControllerFacotry реализует 2 метода

IController IControllerFactory.CreateController(System.Web.Routing.RequestContext requestContext, string controllerName);
void IControllerFactory.ReleaseController(IController controller);

И это все, что нужно.

0 голосов
/ 09 июня 2009

Насколько я понимаю, это должно работать. Вы добавили свою библиотеку контроллеров в качестве ссылки на свой веб-сайт?

Из источника MVC

// ControllerTypeCache.cs:
private static List<Type> GetAllControllerTypes(IBuildManager buildManager) {
    // Go through all assemblies referenced by the application and search for
    // controllers and controller factories.

// DefaultControllerFactory.cs
// if all else fails, search every namespace
return GetControllerTypeWithinNamespaces(controllerName, null /* namespaces */);
0 голосов
/ 09 июля 2010

У меня была похожая проблема с использованием dotnet 4.0 с использованием MVC 2.0 на IIS7.0. После проверки всех нормальных вещей, правильной версии сборки MVC и т. Д. Я, наконец, переместил код из случайного места на веб-сервере в / inetpub / www и заново создал свой сайт на веб-сервере. Это, казалось, сделало трюк. По-видимому, DotNet MVC нравится иметь источник в / inetpub / www, чтобы иметь возможность разрешать пути MVC.

0 голосов
/ 09 июня 2009

Я сделал это не так давно, и единственной сложной задачей было убедиться, что пространство имен , в котором находится контроллер, такое же, как если бы оно было в папке по умолчанию. Основной ловушкой является корневое пространство имен проекта библиотеки классов - вы можете изменить его, щелкнув правой кнопкой мыши узел проекта в обозревателе решений, выбрав Свойства и изменив значение в Корневое пространство имен текстовое окно. Самый простой способ - назвать его так же, как и само приложение MVC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...