我有一个现有的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的,它可能只是第一件失败的事情。
答案 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>