2013-04-16 21 views
11

我需要執行以下操作: 我有一些控制器已準備好並正在運行,但現在我要創建一個BaseController。 我的每Controllers應該繼承它是這樣的:如何使用ViewBag創建BaseController

public class MySecondController : BaseController 

這就是已經到目前爲止運行。 現在問題:

我想在此基本控制器中添加一個ViewBag。這個ViewBag應該可以從我的控制器中調用的每個視圖訪問。

如何實現這一點?

+0

我已經回答了你解釋如何做到這一點的其他問題:http://stackoverflow.com/questions/16034728/how-to-access-the-project-properties-in-a-cshtml-razor-file –

回答

25

您可以覆蓋OnActionExecuting方法,在覆蓋的方法中您可以將數據轉換爲ViewBag字典。

public abstract class BaseController : Controller 
{ 
    protected override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     ViewBag.someThing = "someThing"; //Add whatever 
     base.OnActionExecuting(filterContext); 
    } 
} 
+1

I會建議讓你的BaseController抽象如公共抽象類BaseController:控制器 –

0

你也可以填補ViewBag當newing了基本控制器

Public MustInherit Class BaseController : Inherits Controller 

    Public Sub New() 
     ViewBag.ErrorMessage= "someThing"; //Add whatever 
    End Sub 

End Class 

然後該構造函數將被調用的所有繼承類:

Public Class OrderController : Inherits BaseController 

    Function Index() As ActionResult 
     Return View() 
    End Function 

End Class 

和可從您的剃刀查看:

@ViewBag.ErrorMessage 
+1

Mystery Downvoter? – KyleMit