2011-09-13 16 views
0

自分自身のバックエンドデータベースを使用するようにAccountControllerクラスを調整しようとしています。これを完全に行うために、チェックする_Layout.cshtmlに文字列を送る必要があります。これはどのように可能ですか?ASP.Net MVC 3 HTTP-POSTメソッドから_Layout.cshtmlへの文字列の送信

私はViewDataを試しましたが、これはコントローラが添付されたビューに対応する必要があります。 View/Account/LogOn.cshtmlへのAccountControllerが動作します。

私は_Layout.cshtmlでアクセスしようとすると、null参照を取得しているのと同じ方法でViewBagが動作すると思います。

現時点では、私のコードは問題を解決しようとしたために少し傷ついていますが、ここには私のものがあります。うまくいけば、それはより良い説明に役立ちます。

AccountController/[HTTP-POST] [ログオン

... 
if (user.GetRole(model.UserName).Equals("Admin")) 
{ 
    ViewBag.Role = "Admin"; 
} 
... 

_Layout.cshtml

@if (Request.IsAuthenticated && ViewBag.Role.Equals("Admin")) 
{ 
    ... 
} 

私はもはや(これはコメントに)これはViewBagかのViewDataで行うことができると思いません。どんな解決策も歓迎されるでしょう。あなたがViewBag.Roleのエラーが存在しないでしょうAnkouは

+1

ご質問はありますか? –

+0

上記のコードは機能しません。基本的にViewBag.Roleを参照できないという例外がスローされます。 あるコントローラからビューに文字列を送信する方法を知りたいのですが、直接リンクされていません。 – Ankou

+0

null参照で実行時バインディングを参照できない、または実行できません。ユーザが管理者でない場合に 'ViewBag.Role'を設定していない場合、それは存在しません。 –

答えて

1

if (user.GetRole(model.UserName).Equals("Admin")) 
{ 
    ViewBag.Role = "Admin"; 
} 
else{ 
    ViewBag.Role = ""; 
} 

にあなたのコードを変更する -

は、事前にありがとうございます。だから常に設定する必要があります。

編集あなたのコメントから

は、私はあなたがそれを自分のコントローラだとあなたのために仕事をしている子のアクションを作成する最良のかもしれないと思います。

これは、ロールをチェックし、ViewBag値を設定し、必要に応じて表示します。

+0

私は本当に答えがこれは簡単だったが、それでも私にエラーを与えることを望む。私は自分自身のViewBagを持っているControllersのため、AccountControllerは_Layoutビューに接続していないと考えています。 – Ankou

+0

ああ、あなたが言っているのは、ビューが返されているコードで、 'ViewBag.Role'が設定されていないということですか? –

+0

ええ、いくつか私は、HomeController.ViewBag.Roleの代わりにAccountController.ViewBag.Roleが必要です。私はそれがアクセスしているか、それを見て別の方法は、私はそれをどのようにHomeControllerに送信する必要がありますと思う。ViewBag – Ankou

0

ログオンアクションを呼び出す前に_Layoutを使用している可能性があります。したがって、_Layoutにチェックを入れてください。

@if (Request.IsAuthenticated && ViewBag.Role != null && ViewBag.Role.Equals("Admin")) 
{ 
    ... 
} 
+0

ありがとうございます。これは、スローされているエラーを取り除きますが、ViewBagの変数が渡されていないという事実を強制します。これを考え始めるImは、可能ではないかもしれません。 ありがとう – Ankou

+0

奇妙な、ビューバックはそこにあるはずです。 ViewBag.Roleが設定されていることを確認するためにアクションにブレークポイントを設定しましたか? – bencobb

+0

はい私はF11で処理しており、ViewBag.Roleは "Admin"に設定されています – Ankou

関連する問題