虚拟目录中的 MVC 应用程序:'ViewBag' 在当前上下文中不存在

MVC application in a Virtual Directory: 'ViewBag' does not exist in the current context

我在用于开发 MVC 应用程序的本地计算机上安装了 IIS Express 10。通常,我在 applicationhost.config 中为我的站点使用以下配置,其中我没有定义虚拟目录:

<site name="Development Web Site" id="1" serverAutoStart="true">
  <application path="/">
    <virtualDirectory path="/" physicalPath="C:\dev\MyMVC" />
  </application>
  <bindings>
    <binding protocol="http" bindingInformation=":8080:localhost" />
  </bindings>
</site>

使用上面的配置,可以在http://localhost:8080

无误地访问MVC应用程序

不过,我最近尝试使用虚拟目录访问该应用程序(请注意路径 "C:\fake" 作为根目录——IIS 要求在任何虚拟目录被定义之前定义站点的根目录—— -参见 How to configure a different virtual directory for web site project with Visual Studio 2015)。我在 applicationhost.config:

中使用以下配置创建了虚拟目录
<site name="Development Web Site" id="1" serverAutoStart="true">
  <application path="/">
    <virtualDirectory path="/" physicalPath="C:\fake" />
  </application>
  <application path="/test/app">
    <virtualDirectory path="/" physicalPath="C:\dev\MyMVC" />
  </application>
  <bindings>
    <binding protocol="http" bindingInformation=":8080:localhost" />
  </bindings>
</site>

使用上述配置并导航至 http://localhost:8080/test/app,MVC 应用程序开始加载,但出现以下错误:

c:\dev\MyMVC\views\index.cshtml(14): error CS0103: The name 'ViewBag' does not exist in the current context

导致此错误的虚拟目录配置是做什么的?没有虚拟目录也能正常工作。

您可以在 Visual Studio 中使用新的 MVC 模板来复制此错误,而无需触及 applicationhost.config 文件中内容以外的任何代码,因此我认为问题出在我的代码中。

事实证明,IIS Express 不仅需要定义整个站点的根目录,而且还需要定义每个虚拟目录 URL 以及。因此,它在将配置更改为此后工作(注意中间“/test”虚拟目录):

<site name="Development Web Site" id="1" serverAutoStart="true">
  <application path="/">
    <virtualDirectory path="/" physicalPath="C:\fake" />
  </application>
  <application path="/test">
    <virtualDirectory path="/" physicalPath="C:\fake" />
  </application>
  <application path="/test/app">
    <virtualDirectory path="/" physicalPath="C:\dev\MyMVC" />
  </application>
  <bindings>
    <binding protocol="http" bindingInformation=":8080:localhost" />
  </bindings>
</site>

http://localhost:8080/test/app 现在可以正常工作,没有 'ViewBag' 错误