2013-04-16 10 views
11

Ho bisogno di fare quanto segue: Ho alcuni controller pronti e funzionanti, ma ora voglio creare un BaseController. ciascuno dei miei Controllers dovrebbe ereditare da questo modo:Come creare un BaseController con un ViewBag

public class MySecondController : BaseController 

questo è già in esecuzione finora. Ora il problema:

voglio aggiungere un ViewBag in questo controller di base. Questo ViewBag dovrebbe essere accessibile da ogni vista chiamata nei miei controller.

Come realizzare questo?

+0

Ho risposto alla tua altra domanda che spiega come procedere: http://stackoverflow.com/questions/16034728/how-to-access-the-project-properties-in-a-cshtml-razor-file –

risposta

25

È possibile sovrascrivere il metodo OnActionExecuting nel metodo sottoposto a override è possibile dati nel dizionario ViewBag.

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

I suggerirebbe di rendere astratto il tuo BaseController es classe astratta pubblica BaseController: Controller –

0

È anche possibile riempire il ViewBag quando Newing il controller di base

Public MustInherit Class BaseController : Inherits Controller 

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

End Class 

Poi quel costruttore verrà chiamato per tutte le classi ereditate:

Public Class OrderController : Inherits BaseController 

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

End Class 

e accessibile dal vostro vista del rasoio:

@ViewBag.ErrorMessage 
+1

Mystery Downvoter? – KyleMit