ViewBag未在混合Webforms / MVC项目中声明

时间:2015-05-15 16:18:47

标签: asp.net-mvc razor webforms viewbag

我有一个现有的webforms项目(.net 4.5.1),我刚刚添加了MVC(我刚刚使用Individual认证创建了一个新的MVC项目,并将所有位复制到了Webforms项目中)。

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

  

错误BC30451:未声明“ViewBag”。它可能无法访问   达到保护水平。

似乎发生在模型的视图上。

我找到了其他答案,表明要检查MVC的版本,我的所有MVC DLL都是最新版本(版本5.2.3.0),以及最新的Razor相关内容。我还确认了View目录中存在web.config文件。我还做了标准的偏执事情,如完全清理和重新编译,重新启动Visual Studio等。

我在同一个控制器上尝试了一个新的测试操作,唯一的区别是失败的控制器有一个模型。以下是两个操作(MyTest可以,登录没有):

0 5 * * * command

这是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

这是Login视图(Visual Studio模板附带的默认视图,因此我只包含前几行):

@Code
ViewBag.Title = "MyTest"
End Code


<h2>MyTest</h2>

Hiya!!

这是我的Views / Web.config:

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

<h2>@ViewBag.Title.</h2>
.
.
.

有关修复或解决方法的任何想法?我很确定这不是特定于ViewBag的,它可能只是第一件失败的事情。

1 个答案:

答案 0 :(得分:0)

它似乎与命名空间有关。由于webforms应用程序是用VB编写的,我想知道VB中的命名空间约定(子文件夹不会自动获取新的命名空间)是否会导致问题?

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

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

现在是config namespace部分:

<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>