2016-09-21 9 views
0

Razorを使用して画面に変数を印刷したいとします。 CustomPrincipalという名前のクラスが正しく保存されているHttpContextに保存されています。私はそれが、残念ながら動作していない以下の例のように1行にそれを持ってしたいRazor(C#)を使用して画面に変数を印刷する

:それはのHttpContextにそれを正しく保存されて

@* This is not working... *@ 
@(CustomPrincipal)Context.Items["IUser"].Name 

以下の例は、しかし働いています。

@{ CustomPrincipal user = (CustomPrincipal)Context.Items["IUser"]; } 
@user.Name 

最初の例が機能していない理由を知っている人はいますか?

エラーは次のとおりです。

コンパイラエラーメッセージ:CS0118: 'CustomPrincipalは' 'タイプ' ですが、 '変数' のように使用され

+0

あなたが「動作しない」とはどういう意味ですか?エラーメッセージがありますか?何も表示されませんか? – DavidG

+0

[尋ねる]を読んで、「働いていない」ことを詳述し、あなたの研究を分かち合う。これは括弧の問題です。文字列 'Name'を' CustomPrincipal'にキャストできません。 – CodeCaster

+2

'CustomPrincipal'オブジェクトを括弧で囲む必要があるかもしれません。そうしないと、' @((CustomPrincipal)Context.Items ["IUser"])。)) ' – DavidG

答えて

0

すべてのクレジットは@DavidGに行き、 @CodeCaster、コメントに記載されています。それ以外Context.Items["IUser"]が何であるかであるObject種類はNameプロパティが存在しないために必要な

@(((CustomPrincipal)Context.Items["IUser"]).Name) 

括弧。最初にObjectCustomPrincipalをキャストするためにかっこを追加してから、そのタイプのNameプロパティにアクセスする必要があります。

同じ問題のもう一つの例:https://stackoverflow.com/a/4151988/4585226

+1

質問の最初の例は、 'Object Context.Items [" IUser "]'の 'Name'プロパティを' CustomPrincipal'型にキャストしようとしているため動作しません。 。あなたの例は 'Object'を' CustomPrincipal'に最初にキャストし、 'CustomPrincipal'型の' Name'プロパティにアクセスするので動作します。 – Zack

関連する問題