将MVC应用程序作为子应用程序运行?

时间:2009-03-12 21:39:39

标签: c# .net asp.net asp.net-mvc iis-7

我正在尝试创建一个MVC应用程序作为我的标准Asp.Net Web应用程序的子应用程序。这两个项目都在同一个解决方案中。虽然父应用程序看起来很顺利,但我无法让子应用程序工作。在对我的两个web.configs进行一些按摩之后,我能够让Asp.Net运行时接受配置,但是我无法浏览到MVC应用程序中的任何页面/控制器,包括子的根-application(“http://RootSite/SubApplicationName/”)。我不断得到404。

实际上,当我转到网址“http://RootSite/SubApplicationName/Home/Index/”时,我确实收到了回复。它将我重定向到该文件夹​​中的index.aspx,并抛出此错误:

  

无法找到“索引”视图或其主页。以下地点   被搜查:
      〜/ Views / Home / Index.aspx
      〜/ Views / Home / Index.ascx
      〜/ Views / Shared / Index.aspx
      〜/查看/共享/ Index.ascx

IIS(7)中的子应用程序设置得相当直接:它设置为在与父应用程序相同的应用程序池中运行,后者在集成模式下运行Asp.Net 2.0。

我的怀疑是我在web.configs中有一些东西正在抛弃它。是否有关于HTTPModules或URL授权模块等的事情,我应该确认这些事情不会妨碍MVC的发展?

另外,在global.asax.cs文件中,默认路由是否应该不同?默认情况下,传递给routes.MapRoute的url参数为:

"{controller}/{action}/{id}"

是否应该以子应用程序的名称开头,如此?

"SubApplicationName/{controller}/{action}/{id}"

我尝试过这样的改变,但它并没有解决问题。

非常感谢任何想法。此外,有关将MVC Web应用程序设置为子应用程序的一般信息也很棒。

感谢。

3 个答案:

答案 0 :(得分:1)

我做了类似的事情,但不一样,我不得不从一个单独的dll加载视图。就我而言,它是一个类库,而不是一个不同的Web应用程序,但据我所知它应该是相同的。

您要做的第一件事是创建一个VirtualPath Provider,告诉路由引擎如何在子应用程序视图中查找您的内容。有关如何执行此操作的详细说明,请访问:

http://www.wynia.org/wordpress/2008/12/05/aspnet-mvc-plugins/

我相信这会让你开始;)

答案 1 :(得分:0)

确保您没有在Views目录的名称中出现任何拼写错误。我收到了同样的错误消息,经过30分钟的头部刮擦意识到我拼错了我的一个视图的文件夹名称。 IDE没有以任何有意义的方式选择它(例如,如果它明确地告诉我,我引用的视图的路径不正确 - “未找到”可能意味着一些不同的事情,那将是很好的)。

答案 2 :(得分:0)

子应用程序不直接适用于MVC Web应用程序。你必须在global.asax中编写很多被黑客入侵的代码。使用子域而不是子应用程序。