2

問題:

必要なのは @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 を返します。

4

1 に答える 1

1

ActionResultaから a anotherを返したい理由がわかりませんcontroller。問題のドメインを理解するために、より詳細な情報を提供できる可能性があります。

結果を返すBaseController静的メソッドを使用して宣言することを検討できると思います。GetErrorDone

このメソッドは All から呼び出すことができますChild Controllers


または 2 番目の回答

Controller.RedirectToActionを使用して、必要なアクションにリダイレクトすることを検討してください。

e.g. RedirectToAction("action name" "controller Name")
于 2012-05-30T13:30:31.380 に答える