2

問題:MVC是一個不同的控制器上定義的操作3使用的ActionResult

我需要的是類似於@ Html.RenderAction(「行動」,「控制器」),但一個東西,我可以使用不同的控制器。這對於例如:

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

+0

http://stackoverflow.com/questions/483091/render-作爲一個字符串的視圖 –

+0

[.NET MVC調用方法在不同的控制器上]的可能重複(http://stackoverflow.com/question s/1296680/net-mvc-call-method-on-different-controller) – jgauffin

+1

感謝這些鏈接,但是:我不需要'渲染''View',我需要創建一個'ActionResult'對象的實例(更類似於渲染動作 - 與渲染視圖不同)。另外,我不需要返回一個字符串,我需要返回一個ActionResult(它需要controllerContext因此它不能被重構)。這是非常具體和非常不同的 –

回答

1

不知道爲什麼你想從另一個controller返回ActionResult。可能你可以提供更多的細節來了解我們的問題領域。

我想你可以考慮使用BaseController並聲明一個帶有返回結果的靜態方法GetErrorDone

該方法可以從全部Child Controllers中調用。


或使用第2個答案

考慮到只是將其重定向到需要採取措施Controller.RedirectToAction

e.g. RedirectToAction("action name" "controller Name") 
+0

感謝您的回覆,但共享方法不能幫助我的情況。我需要創建很多部分然後撰寫它們。 –

+0

動作結果表示框架將代表操作方法執行的「命令」。你的命令是什麼?它會返回到View的什麼? – swapneel

+0

這正是問題 - 我不希望ActionResult直接返回到視圖,我想要ActionResult返回到控制器。我只是想要在控制器級別而不是視圖級別上收集所有子ActionResult的責任。 iE:而不是(在剃刀)@ Html.Action([獲取主菜單]),@ Html.Action([獲取側欄])等....我想要在主控制器中獲取所有組件 –

相關問題