如何设置或指定用于ASP.NET MVC的Controllers文件夹而不是默认的Controllers文件夹?

时间:2009-06-08 23:02:10

标签: asp.net-mvc

我正在使用VS2008和.net 3.5。我在我的解决方案中创建了一个类库(Myproject.Controllers)。在这个类下,我添加了一个Controllers文件夹。在文件夹中我添加了一个声明为的MyController public class MyController:Controller

我的观看次数仍在默认的观看文件夹中。现在,当我在VS中运行它时,我在Default.aspx.cs中收到一条消息: {“无法找到路径'/'的控制器,或者它没有实现IController。”}

如果我将MyController的副本放在默认的Controllers文件夹中,那么它可以正常工作。有谁知道如何设置/配置控制器路径?我在网上搜索过,但没有找到任何相关内容。谢谢。

4 个答案:

答案 0 :(得分:1)

通过创建自己的Controller工厂,您可以准确指定控制器的使用方式。这是

的方式

第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);

这就是它的全部内容。

答案 1 :(得分:0)

我不久前做过这个,唯一棘手的部分是确保控制器所在的命名空间与默认文件夹中的相同。主要缺陷是类库项目的根命名空间 - 您可以通过右键单击解决方案资源管理器中的项目节点,选择属性并更改根命名空间中的值来更改它em>文本框。最简单的方法是将其命名为与MVC应用程序本身相同。

答案 2 :(得分:0)

根据我的理解,这应该可行。您是否已将Controllers库添加为对网站的引用?

来自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 */);

答案 3 :(得分:0)

我在IIS7.0上使用dotnet 4.0使用MVC 2.0时遇到了类似的问题。在检查了所有正常的东西,拥有正确的MVC程序集版本等之后,我最终将代码从Web服务器上的随机位置移动到/ inetpub / www并在Web服务器上重新创建我的站点。这似乎已经成功了。显然,DotNet MVC喜欢让/ inetpub / www下的源能够解析MVC路径。