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 にアクセスする際にこれらの問題は発生しません。これは間違いなく初期化の問題のようです。