2012-04-19 12 views
5

Ho il seguente nel mio controller;Crea ActionResult comune

public ActionResult CocktailLoungeBarAttendant() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult cocktailLoungebarattendant(string name, string email, string phone) 
    { 
     return View(); 
    } 

    public ActionResult merchandisecoordinator() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult merchandisecoordinator(string name, string email, string phone) 
    { 
     return View(); 
    } 

Questo si verifica solo 4 volte ma mi infastidisce il fatto che il codice venga ripetuto 4 volte.

Poi ho un BaseController che poi afferra i parametri e fa cose con loro;

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 

mi piacerebbe essere in grado di farla finita con le 's Messaggio ActionResult e hanno uno solo in un controller di base dicono.

È possibile?

+0

Quali sono le azioni del POST? Non c'è differenza nell'elaborazione tra il 2? Non capisco cosa stai cercando di ottenere. –

+0

Non lo farò affatto, anche se non credo sia possibile. Complementa molto il codice senza alcun valore. Le classi base sono molto vecchie come per me :) –

+0

non c'è differenza in ciò che i post stanno facendo no, da qui il mio "desiderio" di non ripetere il codice – griegs

risposta

3

Che cosa si potrebbe fare è questo: Nella tua (di base) del controller aggiuntivo:

protected override void HandleUnknownAction(string actionName) 
    { 
     var controllerName = GetControllerName(); 
     var name = GetViewName(ControllerContext, string.Format("~/Views/{0}/{1}.cshtml",controllerName, actionName)); 
     if (name != null) 
     { 
      var result = new ViewResult 
          { 
           ViewName = name 
          }; 
      result.ExecuteResult(ControllerContext); 
     } 
     else 
      base.HandleUnknownAction(actionName); 
    } 

    protected string GetViewName(ControllerContext context, params string[] names) 
    { 
     foreach (var name in names) 
     { 
      var result = ViewEngines.Engines.FindView(ControllerContext, name, null); 
      if (result.View != null) 
       return name; 
     } 
     return null; 
    } 

Questo tenterà di verificare se una vista esiste per metodi non definiti. Penso che puoi estenderlo da qui per soddisfare le tue esigenze.

+0

Grande, grazie per quello – griegs