虚拟目录中的 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' 错误
我在用于开发 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' 错误