2009-03-21 13 views
2
protected internal RedirectToRouteResult RedirectToAction(
    string actionName, 
    string controllerName); 

bedeutet, dass ich nichtasp.net Mvc Controller.RedirectToAction

tun können
public static ActionResult RedirectToErrorAction(this Controller controller) 
{ 
    // redirect to custom error page 
    return controller.RedirectToAction("error", "support"); 
} 

Irgendwelche Ideen?

+0

was ist Ihre Frage – TStamper

+0

eine Idee zu einer Vermeidung des Problems – blu

+0

Von dem, was youre Ihre Aktion zu sagen Name ist "Fehler" und es liegt in Ihrem Controller, der Support-Controller benannt wird, aber warum benennen Sie eine Controller-Aktion ein MVC-Methodenname – TStamper

Antwort

1

Sie können stattdessen eine benutzerdefinierte, gemeinsam genutzte Fehleransicht in Erwägung ziehen, aber wenn Sie dies wirklich tun müssen, sollten Sie möglicherweise die Verwendung von reflection zum Aufruf der internen Methode in Betracht ziehen. Ersteres könnte in einem Basis-Controller implementiert werden, der die Grundlage für all Ihre Controller bildet.

Erstes Beispiel:

public class BaseController : Controller 
{ 
    private ActionResult CreateErrorResult(string message) 
    { 
     ViewData["message"] = message; 
     ... 
     return new View("CustomError"); 
    } 
} 

Zweites Beispiel (wenn durch Reflexion das Attribut internal immer funktioniert):

public static ActionResult RedirectToErrorAction(this Controller controller) 
{ 
    MethodInfo info = typeof(Controller).GetMethod("RedirectToAction", 
          BindingFlags.NonPublic|BindingFlags.Instance, 
          null, 
          new Type[] { typeof(string), typeof(string) }, 
          null); 
    return info.Invoke(controller, new object[] { "error", "support" }) 
       as ActionResult; 
} 
+0

GetMethod funktioniert nicht bei geschützten Methoden und das Invoke muss in ActionResult umgewandelt werden. – blu

+0

Es tut uns leid - Sie können es möglicherweise mit BindingFlags.NonPublic bekommen. – tvanfosson