0

たとえば、「製品」領域と、「ホーム」と「スイート」の2つのコントローラーがあります(このシナリオでは「スイート」のように動作するコントローラーがさらにあります)。

URLが次のようになるように「ProductAreaRegistration.cs」を構成しました。

\ Products \
(コントローラー= "ホーム"、アクション= "インデックス")

\ Products \ Suite
(コントローラー= "スイート"、アクション= "インデックス")

\ Products \ Suite \ TechnicalSpecification
(コントローラー= "Suite"、アクション= "TechnicalSpecification")

アクション「TechnicalSpecification」はそのエリアのすべてのコントローラーに表示されますが、「Home」コントローラーがそのコントローラーであり、実際に主な作業を行います。「Suite」のような他のコントローラーは、コントローラー関連の処理を実行してから、「Home」、「TechnicalSpecification」にリダイレクトします。

// Suite-Controller
public ActionResult TechnicalSpecification()
{
    //doSomethingThatOnlyThisControllerHasToDo();

    return RedirectToAction("TechnicalSpecification", "Home", new { specificationId = 45 });
}

// Home-Controller
public ActionResult TechnicalSpecification(int specificationId)
    {
        Object model = getModelByIdWithSomeMethod(specificationId);
        //DoEvenMoreThingsHere();

        return View(model);
    }

私の問題は、「Suite」、「TechnicalSpecification」のリンクを見ると、
\ Products \ Suite\TechnicalSpecificationが表示されていることです。

ただし、そのリンクをクリックすると、アドレスバーのURLが
\ Products \ TechnicalSpecification?specificationId=45に変わります。

リダイレクトのため。前述のようにURLを維持したいと思います。

したがって、「return RedirectToAction(...)」の代わりに「returnViewResultFromOtherController(...)」のようなものがあり、リダイレクトされませんか?

あなたがアイデアを得たことを願っています。
そうでない場合は、お問い合わせください!
前もって感謝します!

4

1 に答える 1

0

これを行うにはおそらくこれよりも良い方法がありますが、アクションで他のコントローラーをインスタンス化し、メソッドを呼び出して、その結果を返すことを試みることができます。投稿したのと同じURLが残りますが、他の方法の結果が得られます。

何かのようなもの:

Controller home = new HomeController();
return home.TechnicalSpecification(specificationId);

ただし、これはリファクタリングを要求します。

于 2012-09-26T16:01:06.440 に答える