asp.net mvc Controller.RedirectToAction - PullRequest
       8

asp.net mvc Controller.RedirectToAction

2 голосов
/ 21 марта 2009
protected internal RedirectToRouteResult RedirectToAction(
    string actionName,
    string controllerName);

означает, что я не могу сделать

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

Есть идеи?

1 Ответ

1 голос
/ 21 марта 2009

Вместо этого вы можете рассмотреть возможность возврата настраиваемого общего представления об ошибках, но если вам действительно нужно это сделать, вы можете рассмотреть возможность использования отражения для вызова внутреннего метода. Первый может быть реализован в базовом контроллере, который станет основой для всех ваших контроллеров.

Первый пример:

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

Второй пример (если получение внутреннего атрибута с помощью отражения работает):

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...