2011-09-27 14 views

回答

23

您得到的錯誤告訴ASP.NET MVC已經找到兩個具有相同名稱的操作,並且無法選擇使用哪一個。

如果你在你的DinnersController.cs兩隻指數-操作:

public ActionResult Index() { 

和:

public ActionResult Index(int? page) { 

那麼你應該刪除的第一個動作。因爲第二個是第一個的'更新'版本。 第二動作接受請求到:?

/晚餐

/晚餐頁= 2

/晚餐/索引

/晚餐/索引頁= 2

隨着我的變化ň的RegisterRoutes也接受請求:

/晚餐/頁/ 2

您可以有兩個操作具有相同的名稱,提供一個用於保存(回傳),在那裏你裝飾用的節能行動[AcceptVerbs(HttpVerbs.Post)]或只是[HttpPost]

+0

由於絕大多數博客,書籍和文檔都介紹了UrlParameter.Optional作爲「保存額外路線」的方法,因此,恕我直呼人員會這樣做「2獲取方法,同名,不同簽名」。因此,對於經典「public ActionResult List()」路由匹配他們會說添加一個路由的UrlParameter枚舉,如:routes.MapRoute(「simple」,「{controller}/{action}/{id}」, new {id = UrlParameter.Optional});然後他們會向你展示一個「public ActionResult List(int?id)」。他們幾乎從不說明的是,你必須刪除原來的「ActionResult List()」方法才能工作。 – rism

21

MVC不支持的操作方法重載的控制器。在同一個控制器上不可能有兩個具有不同方法簽名的Index()操作。

爲了使您正在測試工作的例子,您必須刪除不接受任何參數的Index()操作,並將其替換爲以可爲空的int作爲參數的操作。

+5

如果MVC支持重載操作,那將會很不錯。我希望能夠在我的動作的多個版本之間進行切換,比如通過使用[PriorityAttribute(10)],以便首先執行此操作。然後,我可以從數據庫配置或者根據需要更改該號碼。 –

相關問題