2011-09-13 52 views
0

我想調整AccountController類,以便它使用我自己的後端數據庫。爲了完全做到這一點,我需要發送一個字符串到_Layout.cshtml進行檢查。這怎麼可能?ASP.Net MVC 3從HTTP-POST方法發送字符串到_Layout.cshtml

我已經嘗試使用ViewData,但這需要控制器對應於附加的視圖,例如, AccountController查看/帳戶/ LogOn.cshtml將工作。

我相信ViewBag的工作方式與我在_Layout.cshtml中嘗試訪問它時得到空引用的方式相同。

目前我的代碼有點損壞,因爲試圖解決這個問題,但這裏是我的。希望這會有助於更好地解釋。

的AccountController/[HTTP-POST] LogOn支持

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

_Layout.cshtml

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

我不再認爲這是可以用ViewBag或ViewData的(由於意見)來完成。任何解決方案將受到歡迎。

預先感謝您 - 安口

+1

你的問題是? –

+0

上面的代碼不起作用,它會引發異常,基本上說ViewBag.Role不能被引用。 我想知道如何從一個控制器發送一個字符串到一個視圖,它也不直接鏈接。 – Ankou

+0

不能被引用,或不能對空引用執行運行時綁定?如果你沒有設置'ViewBag.Role',如果用戶不是管理員,那麼它將不存在 –

回答

1

更改您的代碼

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

您將獲得ViewBag.Role一個不存在錯誤。所以它必須始終設置。

編輯

從您的意見,我想你可能是最好創建它有它自己的控制器,併爲你工作一個子操作。

@Html.RenderAction("LogonDisplay"); 

這將檢查角色,設置ViewBag值,然後根據需要顯示。

+0

我真的希望答案是這麼簡單,但它仍然給我錯誤。我相信這是由於控制器有自己的ViewBag,因爲AccountController沒有連接到_Layout視圖。 – Ankou

+0

嗯所以你說的是,在視圖被返回的代碼中,'ViewBag.Role'沒有被設置? –

+0

是的,我需要一些如何AccountController.ViewBag.Role而不是HomeController.ViewBag.Role我認爲它必須訪問或另一種方式來看待它會是我如何將它發送到HomeController。ViewBag – Ankou

0

在調用登錄動作之前,您可能正在使用_Layout。因此,請檢查您的_Layout。

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

謝謝你的迴應。這確實擺脫了拋出的錯誤,但只是強制實現了ViewBag中的變量未被傳遞的事實。我開始認爲這可能是不可能的。 謝謝 – Ankou

+0

奇怪,viewbag應該在那裏。你有沒有在你的行動中加入一個斷點來驗證ViewBag.Role是否被設置? – bencobb

+0

是的,我已經F11'ed通過ViewBag.Role被明確設置爲「管理」 – Ankou