1

私はMVCについて何か誤解していると思います。私は次のことをしようとしています:

public class ControllerA : Controller
{
    public ActionResult Index()
    {
        // do code

        // perform action on ControllerB - something like:
        // RedirectToAction("Action", "ControllerB");

        // CARRY ON with more code
    }
}

public class ControllerB : Controller
{
    public void Action()
    {
        // do code
    }
}

明らかにRedirectToAction("Action", "ControllerB");機能していません。では、どうすればよいですか?Action()を使用する必要のあるすべてのコントローラーをControllerBから継承させることができると思いますが、それは本当に悪い方法だと感じています。助けてください!

4

3 に答える 3

3

RedirectToAction()からActionResultを返す必要があります

return RedirectToAction("Action", "ControllerB");

RedirectToActionを実際にアクションにリダイレクトする場合は、これを実行する必要があります。「機能していない」とはどういう意味かを明確にした後、すべてのコントローラーをベースから継承する必要があると思います。これはかなり標準的なアプローチです。

public class ControllerA : ControllerB
{
    public ActionResult Index()
    {
        // do code

        Action();

        // CARRY ON with more code
    }
}

public class ControllerB : Controller
{
    public void Action()
    {
        // do code
    }
}
于 2010-11-02T03:01:48.463 に答える
0

デリゲートとしてコントローラーファクトリからファクトリメソッド(Func CreateController)をコントローラーに注入し、それを使用して、このような状況などでサブコントローラーを作成しました。あなたの目標を達成する方法はたくさんありますが、それはあなたが望むものを機能させるための迅速な方法かもしれないと思います。

于 2010-11-02T07:44:58.443 に答える
0

現在実行しているコントローラーはクラスのインスタンスであると思います。そのため、コントローラーBのインスタンスを作成して何かを実行できるようにする必要があります。そのため、そこで実行しようとしていることは、ハック。

しかし、私はあなたが求めていると思う結果をより良く得るために2つの方法があると思います:

1)'ControllerBase'クラスを作成し、すべてのコントローラーが'Controller'からではなく、それを継承するようにします。次に、基本クラスに追加できる共有コード(おそらく静的メソッドとして)を作成すると、すべてのコントローラーがメンバーとしてアクセスできます。簡単です。

2)MVCはストレートアップDLLを作成するため、必要に応じて新しいクラスを追加できます。たとえば、「Globals」のような新しいプロジェクトフォルダーを追加し、「Funcs」という新しいクラスファイルを追加すると、アクセスできる静的ライブラリがあります。どこからでも、Funcs.SendEmail(); 等

私がマークから外れている場合は大丈夫です!とにかく幸せなコーディング

于 2010-11-02T04:25:02.377 に答える