Razor视图上的MVC 5 IsInRole用法:无法连接到数据库

时间:2013-11-08 23:33:14

标签: sql-server asp.net-mvc authorization asp.net-mvc-5 asp.net-identity

我在MVC 5中使用新的身份系统时遇到问题,我的目标是在Views上使用User.IsinRole(" RoleName")。例如:

@if(User.IsInRole("Administrator"))
 {
   <li>@Html.ActionLink("Admin", "Index", "Admin")</li>
 }

这是放置在应用程序启动时命中的主布局页面中。在这样做时,我收到以下错误:

&#34;类型&#39; System.Web.HttpException&#39;的例外情况发生在System.Web.dll中但未在用户代码中处理

其他信息:无法连接到SQL Server数据库。&#34;

我已经搜索了高低不同的解决方案,常见的解决方案是包括&#34; [InitializeSimpleMembership]&#34;在控制器的顶部或在应用程序启动时手动初始化数据库连接。 (使用WebSecurity.InitializeDatabaseConnection)。 MVC 5似乎都没有认识到这两种方法。

我还尝试通过使用Aspnet.Identity.UserManager确定角色,随时返回视图以使用IsAdmin布尔填充ViewBag来创建一堆乱码。虽然这是有效的,但这并不是我觉得我应该做的事情。

可能值得注意但是我在后端访问User.IsInRole时没有遇到这些问题,这肯定是一个初始化问题。

3 个答案:

答案 0 :(得分:21)

我遇到了同样的问题,但Stunt的答案对我不起作用。尝试了this question的答案,解决了这个问题。

对于懒人,您可以尝试将其添加到您的web.config文件中:

 <system.webServer>
    <modules>
      <remove name="RoleManager" />
    </modules>
  </system.webServer>

答案 1 :(得分:3)

我设法通过从我的Web配置中删除以下行来解决问题:

<roleManager enabled="true" />

在下面的示例代码中比较line for line时发现了这个:

https://github.com/rustd/AspnetIdentitySample/tree/master/AspnetIdentitySample

答案 2 :(得分:0)

在启动应用程序时创建数据库。使用dbcontext在Global.ascx中添加以下内容。

using (FooContext db = new FooContext()) 
        {
            db.Database.CreateIfNotExists();
        }