2014-06-25 74 views
1

我將數據提交給IAuthorizationFilter.OnAuthorization過程中的ViewBag,並將其放入_Layout.cshtml-in,但是當我在普通視圖中使用分部視圖時,ViewBag中的數據爲空。 這是正常行爲,還是我做錯了什麼?ViewBag missing

public class MyAuthorizeAttribute : AuthorizeAttribute, IAuthorizationFilter 
{ 
    void IAuthorizationFilter.OnAuthorization(AuthorizationContext filterContext) 
    { 
     base.OnAuthorization(filterContext); 

     filterContext.Controller.ViewBag.Name = this.name; 
     filterContext.Controller.ViewBag.Menus = user.GetMenu(this.role); 
    } 
    ... 
} 

的_Layout.cshtml:

<section id="login"> 
    Hello, <span class="username">@ViewBag.Name</span>! 
</section> 
<nav> 
    @Html.MenuLink(ViewBag.Menus as List<Entity.Models.MENU>, (string)ViewBag.Name) 
</nav> 

的觀點:

@model Web.ViewModels.RegistrationEntryViewModel 

@Html.Partial("_RegistrationEntry", Model) 

行動:

[MyAuthorize("ADMINISTRATORS")] 
[HttpGet] 
public ActionResult NewRegistrationEntry() 
{ 
    //The viewbag is already null here 
    ... 
} 
+2

如果有一些代碼說明它會更容易理解問題 – Andrei

回答

0

請停止使用ViewBag這樣。它不是爲此設計的。原因ViewBag在控制器(我懷疑)是空的,這些是不同的ViewBag過濾器和控制器中的對象。

如果您需要在視圖中執行重複操作,那麼有更好的方法可以做到這一點。對於你的菜單,我會創建一個讀取菜單信息的動作,將其放入ViewModel(不在ViewBag)並輸出局部視圖。然後在您的佈局中,我會呈現該部分操作。 (在這個局部視圖中添加一些緩存)