在Razor中使用Roles.IsUserInRole时出错

时间:2015-03-25 14:53:22

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 razor roleprovider

我正在使用MVC 5,我的视图中有以下代码:

 @if (Roles.IsUserInRole("admin"))
        {
            <li class="@Html.IsSelected(controller: "Vacants")">
                <a href="#"><i class="fa fa-edit"></i> <span class="nav-label">Vacants</span><span class="fa arrow"></span></a>
                <ul class="nav nav-second-level">
                    <li class="@Html.IsSelected(action: "Create")"><a href="@Url.Action("Create", "Vacants")">Create New Vacatns</a></li>
                    <li class="@Html.IsSelected(action: "Morris")"><a href="@Url.Action("Edit", "Vacants")">Edit Vacant</a></li>
                    <li class="@Html.IsSelected(action: "Rickshaw")"><a href="@Url.Action("Delete", "Vacants")">Delete Vacant</a></li>
                    <li class="@Html.IsSelected(action: "Chartjs")"><a href="@Url.Action("History", "Vacants")">History</a></li>
                </ul>
            </li>
        }

开始时,当我运行我的网站时,我收到一条错误消息,指出 RoleManager功能未启用 。所以,我在网络配置中启用它。

<system.web>
. . .
   <roleManager enabled="true" />
</system.web>

之后错误消失了。但是,现在我又得到了另一个:

无法连接到SQL Server数据库

为什么会出现此错误?是否有任何我缺少的配置需要设置?

提前致谢

1 个答案:

答案 0 :(得分:1)

尝试设置默认角色管理器提供程序,如下所示:

<roleManager defaultProvider="DefaultRoleProvider" enabled="true">
  <providers>
    ...
  </providers>
</roleManager>

您可以稍后根据需要添加自定义提供商...

您还必须设置数据库以启用成员资格和角色提供程序。您必须为成员资格设置数据库:

如果您没有数据库,可以设置localy:

<connectionStrings>
  <add name="DefaultConnection" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\MembershipDB.mdf;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>

然后设置成员资格:

<membership>
  <providers>
    <add connectionStringName="DefaultConnection" enablePasswordRetrieval="false"
      enablePasswordReset="true" requiresQuestionAndAnswer="false"
      requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6"
      minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
      applicationName="/" name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </providers>
</membership>

最后是roleProvider:

<roleManager defaultProvider="DefaultRoleProvider" enabled="true">
      <providers>
        <add connectionStringName="DefaultConnection" applicationName="/" name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      </providers>
    </roleManager>

甚至更好:

阅读本文 How To: Use Role Manager