2012-04-19 9 views
5

Tengo lo siguiente en mi controlador;Create common ActionResult

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(); 
    } 

Esto solo ocurre 4 veces pero me molesta que tengo el código repetido 4 veces.

Luego tengo un BaseController que luego toma los parámetros y hace cosas con ellos;

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 

Me gustaría ser capaz de acabar con el puesto ActionResult 's y tienen uno solo en un controlador base dicen.

¿Esto es posible?

+0

¿Qué están haciendo tus acciones POST? ¿No hay alguna diferencia en el procesamiento entre los 2? No entiendo muy bien lo que intentas lograr. –

+0

No haré eso en absoluto, incluso si no creo que sea posible. Esto complica mucho el código sin ningún valor. Tener las clases base es muy viejo como para mí :) –

+0

no hay diferencia en lo que están haciendo las publicaciones no, de ahí mi "deseo" de no repetir el código – griegs

Respuesta

3

Lo que podría hacer es lo siguiente: En su (base) controlador de complemento:

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; 
    } 

Este tratará de comprobar si existe una visión para que no se definen métodos. Creo que puede extenderlo desde aquí por su cuenta para satisfacer sus necesidades.

+0

Genial, gracias por eso – griegs