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")