2016-09-21 53 views
0

我想使用Razor在屏幕上打印變量。我有一個名爲CustomPrincipal的類保存在HttpContext中,保存正確。使用Razor在屏幕上打印變量(C#)

我希望它有它在一行如下面的例子,這是不幸的是沒有工作:

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

下面的例子是工作的,因此它正確地保存它的HttpContext。

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

有誰知道爲什麼第一個例子不工作,你能告訴我一個解決方案嗎?

錯誤是:

編譯器錯誤消息:CS0118: 'CustomPrincipal' 是 '類型',但使用類似 '變量'

+0

你說的「不工作」是什麼意思?你有錯誤信息嗎?什麼都沒有顯示? – DavidG

+0

閱讀[問],詳述「不工作」並分享你的研究成果。這是一個括號問題,您不能將字符串'Name'強制轉換爲'CustomPrincipal'。 – CodeCaster

+2

您可能只需將'CustomPrincipal'對象封裝在parens中,否則它會嘗試將整行轉換爲該類型:'@(((CustomPrincipal)Context.Items [「IUser」])。Name)' – DavidG

回答

0

所有信用去@DavidG和@CodeCaster,在評論中提到。

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

在有需要的,否則沒有Name財產上Object類型是什麼Context.Items["IUser"]是括號。我們必須添加圓括號,先將Object轉換爲CustomPrincipal,然後再訪問該類型的Name屬性。

同樣的問題的另一個例子:https://stackoverflow.com/a/4151988/4585226

+1

這個問題的第一個例子不起作用,因爲它試圖將'Object Context.Items [「IUser」]'的'Name'屬性轉換爲'CustomPrincipal'類型,至少這是正在解釋的內容。您的示例工作原理是因爲它首先將「Object」轉換爲「CustomPrincipal」,然後訪問「CustomPrincipal」類型的Name屬性。 – Zack