2016-04-13 22 views
0

私はMvcのためのCmsを使用しています。これは、CMSは、以下のコントローラーがあります。カスタマイズのニーズのためにMvcのアクションメソッドをオーバーライドする方法

public class OrderController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

を、私はこのコントローラの動作を無効にし、同じURLをユーザーが訪問している時に別の何かを返すようにしたいと思います。この結果を達成するための最良のアプローチは何ですか?

私はこの答えは、次のと、CMSコントローラを継承してのActionResultにオーバーライドを作ってみました:How to override controller actionresult method in mvc3?

public class OrderController : Cms.Areas.Admin.Controllers.OrderController 
{ 
    public override ActionResult Index(Guid orderItemId) 
    { 
     // Do extra stuff 

     return View(); 
    } 
} 

しかし、これは動作しません。私が "admin/order"をナビゲートしようとすると、私はまだCmsコントローラ/アクションに入ります。

提案がありますか?

注:オーバーライドしようとしているコントローラは別のアセンブリにあり、アクションは仮想に設定されています。それはエリア内にあるため、ルートはAreaRegistration内で設定されます。

+0

「MVC for Mvcを使用しています」 - MVCを使用する多数のCMSプラットフォームがあり、カスタマイズ可能であることは自宅でも可能だと言えます。どちらを使用しようとしているのかわからなくても、誰もこれに答えることはできません。使用しているプラ​​ットフォームと、そのプラットフォームにどのように接続しようとしているのかを記入してください。 – Igor

+0

実際には、私はCms自体を構築しているので、私が望むようにコードを変更することができます。私は開発者がオーバーライドできるコントローラを実装するためのきちんとした方法を探しています – tocqueville

+0

Ok、次の質問。しかし、これはうまくいかない。 ' - 実際に働いているように私に見える。上書きするコードでは新しいビューが定義されず、上書きするメソッドと同じ結果が返され、同じViewが生成されます。これをテストするには、上書きするコードのブレークポイントを設定するか、文字列パラメータ 'View(" Other ");を使用して別のビューを返します。また、親に' virtual'を付けずにキーワード 'override'を使うことはできません。最後に、ルーティングを考慮する必要があります。新しいコントローラを使用するためにルートをどのように定義していますか? – Igor

答えて

0

あなたの要求ではなくEcommerceOrderControllerをOrderController使用する必要がある、あなたのMVC routes

0

に見てこれは、ルーティングの問題であることを私には思えます。あなたのルートが依然としてオリジナルを指している場合は、コントローラーをオーバーライドするかどうかは関係ありません。 URLでアクションを呼び出す場合は、現在解決しているルートよりも優先度の高いルートを追加する必要があります。

+0

それでは、明確にするために、あなたは上書きするものを完全に脇に置いておきたいと思っています...そしてカスタムルートで指す別のコントローラとアクションを作成してください。 – tocqueville

+0

はい。ルートとは、どのコントローラとアクションが呼び出されるかを制御するものです。 – esmoore68

関連する問題