2011-09-27 14 views
8

ページングサポートの実装後にこのエラーが発生します。コントローラータイプ 'DinnersController'のアクション 'Index'に対する現在の要求は、以下のアクションメソッド間で曖昧です。

私は、HTMLチュートリアルのこのステップにしています:http://nerddinnerbook.s3.amazonaws.com/Part8.htm

+0

実際のエラー出力とスタックトレースを提供できますか?さもなければ、あなたがどこにいるのか、そしてアプリケーションがエラーを投げるときに何をしているのかを伝えることは難しいです。 – Maciej

答えて

23

エラーが発生すると、ASP.NET MVCは同じ名前の2つのアクションを検出し、どちらを使用するかを選択できません。

あなたDinnersController.csで2索引のアクションを持っている場合:

public ActionResult Index() { 

と:

public ActionResult Index(int? page) { 

その後、あなたは最初のアクションを削除する必要があります。 2番目は最初のバージョンの '更新された'バージョンです。 二アクションへの要求を受け入れる:=

/ディナー

/夕食ページ= 2

/夕食/インデックス

/夕食/インデックスページ? 2

変更i N RegisterRoutesそれはまたの要求を受け入れる:

/夕食/ページ/ 2

あなたが持つ省エネ行動を飾る(ポストバック)を、保存するための一方が提供する、同じ名前の2つのアクションを持つことができます[AcceptVerbs(HttpVerbs.Post)]または単に[HttpPost]

+0

IMHOの人々は、「余分なルートを保存する」ための方法として、UrlParameter.Optionalのアイデアを紹介するブログ、書籍、ドキュメントの絶対数が多いため、このメソッド2、同じ名前、異なる署名を取得します。 route.MapRoute( "simple"、 "{controller}/{action}/{id}")、 new {id = "{Action}/{id}"のように、ルートのUrlParameter列挙型を追加して "public ActionResult List()ほとんどの場合、これは動作するために元の "ActionResult List()"メソッドを削除する必要があるということです。 – rism

21

MVCはあなたのコントローラ内のアクションメソッドのオーバーロードをサポートしていません。同じコントローラ上に異なるメソッドシグネチャを持つ2つのIndex()アクションを持つことはできません。

作業をテストする例を作成するには、パラメータを受け入れないIndex()アクションを削除し、null可能なintをパラメータとして取るアクションに置き換える必要があります。

+5

MVCがアクションのオーバーロードをサポートしているといいでしょう。私は自分の行動の複数のバージョンを入れ替えることができるようにしたいと思っています。このアクションが最初に行われるように[PriorityAttribute(10)]を持っています。それから私はデータベースの設定から、あるいは私が望むようにその番号を変更することができます。 –

関連する問題