Asp.net mvc ViewBag未在混合Webforms/MVC项目中声明

Asp.net mvc ViewBag未在混合Webforms/MVC项目中声明,asp.net-mvc,razor,webforms,viewbag,Asp.net Mvc,Razor,Webforms,Viewbag,我有一个现有的webforms项目.NET4.5.1,我刚刚添加了MVC,我刚刚使用个人身份验证创建了一个新的MVC项目,并将所有位复制到webforms项目中 当我导航到Sitename/Home/index之类的东西时,它工作正常并呈现页面。但是,当我导航到Sitename/Account/Login时,会出现以下运行时错误: 错误BC30451:未声明“ViewBag”。由于时间关系,它可能无法访问 到它的保护级别 这似乎发生在具有模型的视图上 我已经找到了其他的答案来检查MVC的版本,我

我有一个现有的webforms项目.NET4.5.1,我刚刚添加了MVC,我刚刚使用个人身份验证创建了一个新的MVC项目,并将所有位复制到webforms项目中

当我导航到Sitename/Home/index之类的东西时,它工作正常并呈现页面。但是,当我导航到Sitename/Account/Login时,会出现以下运行时错误:

错误BC30451:未声明“ViewBag”。由于时间关系,它可能无法访问 到它的保护级别

这似乎发生在具有模型的视图上

我已经找到了其他的答案来检查MVC的版本,我所有的MVC DLL都是最新的5.2.3.0版本,以及最新的剃须刀相关的东西。我还确认web.config文件存在于视图目录中。我还做了一些标准的偏执的事情,比如彻底清理和重新编译,重新启动VisualStudio等等

我在同一个控制器上尝试了一个新的测试动作,唯一的区别是失败的一个有一个模型。以下是MyTest有效的两个操作,登录不起作用:

<AllowAnonymous>
Function MyTest() As ActionResult
    ViewBag.ReturnUrl = "testReturnUrl"
    Return View()
End Function

'
' GET: /Account/Login
<AllowAnonymous>
Public Function Login(returnUrl As String) As ActionResult
    ViewBag.ReturnUrl = returnUrl
    Return View()
End Function
以下是MyTest视图:

@Code
ViewBag.Title = "MyTest"
End Code


<h2>MyTest</h2>

Hiya!!
这是Visual Studio模板附带的默认登录视图,因此我只包含了前几行:

@ModelType LoginViewModel
@Code
ViewBag.Title = "Log in"
End Code

<h2>@ViewBag.Title.</h2>
.
.
.
这是我的视图/Web.config:

<?xml version="1.0"?>

<configuration>
<configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
        <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
</configSections>

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
        <namespaces>
            <add namespace="System.Web.Mvc" />
            <add namespace="System.Web.Mvc.Ajax" />
            <add namespace="System.Web.Mvc.Html" />
            <add namespace="System.Web.Routing" />
        </namespaces>
    </pages>
</system.web.webPages.razor>

<appSettings>
    <add key="webpages:Enabled" value="false" />
</appSettings>

<system.web>
    <httpHandlers>
        <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
    </httpHandlers>

    <!--
            Enabling request validation in view pages would cause validation to occur
            after the input has already been processed by the controller. By default
            MVC performs request validation before a controller processes the input.
            To change this behavior apply the ValidateInputAttribute to a
            controller or action.
    -->
    <pages
            validateRequest="false"
            pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
            pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
            userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <controls>
            <add assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
        </controls>
    </pages>
</system.web>

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />

    <handlers>
        <remove name="BlockViewHandler"/>
        <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
    </handlers>
</system.webServer>
</configuration>

有没有关于修复或解决方法的想法?我很确定这不是ViewBag特有的,它可能只是第一个失败的东西。

它似乎与名称空间有关。由于webforms应用程序是用VB编写的,因此我想知道VB中的名称空间约定(子文件夹不会自动获取新名称空间)是否会在这里造成问题

无论如何,我将项目名称作为名称空间添加到Views/Web.config文件中,如下所示,然后重新启动Visual Studio,否则intellisense仍然看不到它,现在可以正常工作了

我可能也在Properties->References列表中添加了名称空间,但不太确定

下面是现在的配置命名空间部分:

<pages pageBaseType="System.Web.Mvc.WebViewPage">
        <namespaces>
            <add namespace="System.Web.Mvc" />
            <add namespace="System.Web.Mvc.Ajax" />
            <add namespace="System.Web.Mvc.Html" />
            <add namespace="System.Web.Routing" />
            <add namespace="MyProjectName" />
        </namespaces>
    </pages>