2012-08-30 41 views
0

我正在使用MVC4,我有一個問題,而不是聲明ViewBag.MenuLevel =「twostage」;在我的控制器中的每個ActionResult中,我可以以某種方式爲每個控制器聲明它?現在,例如我可以說每個控制器有40個ActionResults,這看起來很愚蠢,因此必須多次聲明一個變量 - 所以我確信我缺少一些簡單的東西。如何在控制器中聲明一個變量而不是每個ActionResult

我需要能夠在我的視圖中消耗它以影響演示文稿。思考?楷模?一種新的MVC所以要溫柔! ;)

基本上我希望每個部分(控制器)在前端顯示不同的背景顏色,所以我想打印部分/控制器到一個id在html中,所以我可以通過CSS控制。

乾杯。

回答

3

您將不得不每次都設置ViewBag數據,這是架構的一個不可避免的功能。但是,就控制器代碼而言,您可以使其更清潔一些,並將屬性應用於控制器。

public class ViewBagAttribute : ActionFilterAttribute 
{ 
    public void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var controller = filterContext.Controller; 

     controller.ViewBag.MenuLevel = "twostage"; 
    } 

    public void OnActionExecuted(ActionExecutedContext filterContext) { } 
} 

如果您應用屬性到控制器,你不會有明確添加ViewBag代碼爲每個Action方法,如OnActionExecuting爲每個Action方法自動調用。

+0

這比我的回答冷。 –

+1

我們還可以將參數傳遞給ViewBagAttribute ...以在不同的控制器中設置不同的MenuLevels。 – Avi

0

您可以創建一個BaseController類,在其中定義共享字段和值。所有特定的控制器都從基類繼承。

0

創建您自己的控制器類並繼承它的所有控制器。用ViewBag填充需要傳遞給此控制器類中所有視圖的變量。

+0

好的聽起來很有趣,那麼我只是在特定的控制器中給出聲明的變量值? IE瀏覽器。如果我在BaseController中設置了一個公共字符串MyVar,那麼在其他控制器中以某種方式給出該MyVar值? – cardiac7

+0

是的,可以是..您可以有一個默認值,然後從特定的控制器或操作重寫它。只需更新MyVar設置器中的ViewBag即可。 –

相關問題