MVC 3 получает ActionResult действия, определенного на другом контроллере

Проблема:

Мне нужно что-то похожее на @Html.RenderAction("action","controller"), но то, что я могу использовать из другого контроллера. Это например:

public class FirstController : Controller
{
   public ActionResult GetErDone()
   {
        return View();
   }
}

public class SecondController : Controller
{
   public ActionResult Index()
   {
        ActionResult coolResult = 
               Helper.GetActionResult("GetErDone", "FirstController");

        return View();
   }
}

Прогресс:

Я начал лишать / реформировать реальный метод @Html.Action(), но он действительно имеет слишком много внутренних вспомогательных зависимостей, и я думаю, что это не должно быть так сложно. То, что я до сих пор это:

    private void TestCreateActionFromDifferentController(RouteValueDictionary routeValues, string controllerName, string actionName)
    {
        var httpContext = this.HttpContext;
        var routeData = this.RouteData;
        routeData.Values["action"] = (object)actionName;

        if (!string.IsNullOrEmpty(controllerName))
            routeData.Values["controller"] = (object)controllerName;

        IController myController = ControllerBuilder.Current.GetControllerFactory().CreateController(new RequestContext(httpContext, routeData) , "staticpages");
    }

Конечно, это работает частично (за исключением многих недостатков, таких как токены данных области и т. Д.), Но все же нет другого пути, кроме как размышлять, чтобы добраться до MyActionResult объект.

Резюме:

Находясь внутри контроллера, как можно получить ActionResult от действия, определенного на другом контроллере?

Обновить:

В частности, я пытаюсь использовать что-то вроде System.Web.Mvc.Html.ChildActionExtensions.ChildActionMvcHandler, но тот, который не выполняется, скорее он возвращает ActionResult

1 ответ

Не уверен, почему вы хотите вернуть ActionResult от другого controller, Возможно, вы могли бы предоставить более подробную информацию, чтобы понять нас проблемную область.

Я думаю, что вы могли бы рассмотреть возможность использования BaseController и объявить статический метод GetErrorDone с возвращаемыми результатами.

Этот метод может быть вызван из всех Child Controllers,


ИЛИ 2-й ответ

Попробуйте просто перенаправить его на требуемое действие, используя Controller.RedirectToAction

e.g. RedirectToAction("action name" "controller Name")
Другие вопросы по тегам