私は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内で設定されます。
「MVC for Mvcを使用しています」 - MVCを使用する多数のCMSプラットフォームがあり、カスタマイズ可能であることは自宅でも可能だと言えます。どちらを使用しようとしているのかわからなくても、誰もこれに答えることはできません。使用しているプラットフォームと、そのプラットフォームにどのように接続しようとしているのかを記入してください。 – Igor
実際には、私はCms自体を構築しているので、私が望むようにコードを変更することができます。私は開発者がオーバーライドできるコントローラを実装するためのきちんとした方法を探しています – tocqueville
Ok、次の質問。しかし、これはうまくいかない。 ' - 実際に働いているように私に見える。上書きするコードでは新しいビューが定義されず、上書きするメソッドと同じ結果が返され、同じViewが生成されます。これをテストするには、上書きするコードのブレークポイントを設定するか、文字列パラメータ 'View(" Other ");を使用して別のビューを返します。また、親に' virtual'を付けずにキーワード 'override'を使うことはできません。最後に、ルーティングを考慮する必要があります。新しいコントローラを使用するためにルートをどのように定義していますか? – Igor