13

MVC 5 の新しい ID システムの使用に問題があります。私の目標は、ビューで User.IsinRole("RoleName") を利用することです。例えば:

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

これは、アプリケーションの起動時にヒットするメイン レイアウト ページに配置されます。これを行うと、次のエラーが発生します。

「タイプ 'System.Web.HttpException' の例外が System.Web.dll で発生しましたが、ユーザー コードで処理されませんでした

追加情報: SQL Server データベースに接続できません。」

これに対する解決策を高低で検索しました。一般的な解決策は、コントローラーの上部に「[InitializeSimpleMembership]」を含めるか、アプリケーションの起動時にデータベース接続を手動で初期化することです。(WebSecurity.InitializeDatabaseConnection を使用)。これらの方法はどちらも MVC 5 では認識されないようです。

また、Aspnet.Identity.UserManager を使用してロールを決定することにより、ViewBag に IsAdmin ブール値を設定するビューを返すたびに、一連の厄介なコードを作成することで、この問題を回避しようとしました。これは機能しますが、私が物事を行うべきだと私が感じる方法ではありません。

注目に値するかもしれませんが、バックエンドで User.IsInRole にアクセスする際にこれらの問題は発生しません。これは間違いなく初期化の問題のようです。

4

3 に答える 3

23

私は同じ問題を抱えていましたが、スタントの答えはうまくいきませんでした。この質問への回答を試したところ、問題は解決しました。

怠け者の場合は、これを web.config ファイルに追加してみてください。

 <system.webServer>
    <modules>
      <remove name="RoleManager" />
    </modules>
  </system.webServer>
于 2013-12-27T09:06:18.553 に答える
3

Web Config から次の行を削除することで、問題を回避できました。

<roleManager enabled="true" />

これは、次のコード例を行ごとに比較して調べたときに見つかりました。

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

于 2013-11-24T15:24:25.717 に答える
0

アプリケーションの起動時にデータベースを作成します。dbcontext を使用して Global.ascx に次を追加します。

using (FooContext db = new FooContext()) 
        {
            db.Database.CreateIfNotExists();
        }
于 2014-01-30T18:26:16.293 に答える