Mvcでコントローラから別のコントローラのアクションを呼び出す方法
コントローラAからコントローラBのアクションFileUploadMsgViewを呼び出す必要があり、そのためのパラメータを渡す必要があります。
Code---its not going to the controller B's FileUploadMsgView().
In ControllerA
private void Test()
{
try
{//some codes here
ViewBag.FileUploadMsg = "File uploaded successfully.";
ViewBag.FileUploadFlag = "2";
RedirectToAction("B", "FileUploadMsgView", new { FileUploadMsg = "File uploaded successfully" });
}
In ControllerB receiving part
public ActionResult FileUploadMsgView(string FileUploadMsg)
{
return View();
}
138
9
受理された回答のコメントで@mxmissileが言っているように、IoCのために設定された依存関係が欠落し、
HttpContext
を持たないので、コントローラを新規作成するべきではありません'。代わりに、次のようにコントローラのインスタンスを取得する必要があります:
コントローラは単なるクラスであり、他のクラスのメンバーと同じように、新しいものを作ってアクションメソッドを呼び出します:
var result = new ControllerB().FileUploadMsgView("some string");
.あなたのサンプルは、偽のコードのように見えます。RedirectToAction`の結果を return する必要があります:
@DLehが言うように。 むしろ使用してください。
ただし、コントローラーを指定する場合、特に「子」コントローラー内の「ユーザー」オブジェクト、「サーバー」オブジェクト、または「HttpContext」にアクセスする必要がある場合は、コントローラーコンテキストが重要です。
コードの行を追加しました。
または、System.Webを使用して現在のコンテキストにアクセスしたり、「サーバー」または初期に調整されたオブジェクトにアクセスしたりすることもできます。
注意:フレームワークバージョン4.6(Mvc5)をターゲットにしています。
リゾルバに自動的に実行させます。
コントローラーの内部:
誰かが.netコアでこれを行う方法を検討している場合、起動時にコントローラーを追加することでそれを達成しました。
次に、それを他のコントローラーに注入します。
次に、そのように呼び出します
_myControllerIwantToInject.MyMethodINEed();
。Dlehの答えは正解であり、IoCに設定された依存関係を見逃さずに別のコントローラーのインスタンスを取得する方法を説明します。
ただし、この他のコントローラーからメソッドを呼び出す必要があります。 完全な答えは:です。
これはまさに、「RedirectToAction()」が複雑なクラスオブジェクトを渡さないことを発見した後に探していたものです。
例として、「LifeCycleEffectsResults」コントローラーで「IndexComparison」メソッドを呼び出して、モデルという名前の複雑なクラスオブジェクトを渡します。
失敗したコードは次のとおりです。< br />。
注目に値するのは、文字列、整数などがこのコントローラーメソッドへの旅を生き延びていたが、一般的なリストオブジェクトはCメモリのリークを連想させるものに悩まされていたことです。
上記で推奨したように、これを次のように置き換えたコードは次のとおりです。< br />。
現在、すべてが意図したとおりに機能しています。 先導していただきありがとうございます。
問題が呼び出すことである場合。 この方法で呼び出すことができます。