4

我試圖讓我的網址位於文件/編號格式。我猜我應該在我的控制器中有兩個索引方法,一個帶有參數,另一個沒有。但是我在下面的瀏覽器中看到這個錯誤信息。具有不同簽名的控制器操作方法

反正這是我的控制器方法:

public ActionResult Index() 
{ 
    return Content("Index "); 
} 

public ActionResult Index(int id) 
{ 
    File file = fileRepository.GetFile(id); 
    if (file == null) return Content("Not Found"); 
    else return Content(file.FileID.ToString()); 
} 

更新:完成與添加的路由。謝謝傑夫

回答

4

只有overload Actions如果他們在參數和動詞不同,不只是參數不同。在你的情況,你會希望有一個可爲空ID參數的一個動作,像這樣:

public ActionResult Index(int? id){ 
    if(id.HasValue){ 
     File file = fileRepository.GetFile(id.Value); 
     if (file == null) return Content("Not Found"); 
      return Content(file.FileID.ToString()); 

    } else { 
     return Content("Index "); 
    } 
} 

你也應該閱讀菲爾哈克的How a Method Becomes an Action

+0

@ R0MANARMY我更新了我的方法,但我得到'不能從int轉換?到int'錯誤。當我重新編寫書呆子晚餐時,我意識到同樣的事情發生了。是MVC 2.0的東西嗎?無論如何,如果我強制轉換爲int,它仍然不能在id.HasValue條件(找不到url)中工作。有任何想法嗎? – 2010-04-05 04:20:24

+0

不行不行。網址必須位於/ files?id = 2格式。我想在SO中這樣做:questions/2576570。是否可以使用路由完成? – 2010-04-05 13:28:24

+0

添加到問題 – 2010-04-05 15:02:37

5

要使用文件/ ID URL格式,取出參Index過載,並添加此自定義路由第一所以它的默認路由之前評估:

routes.MapRoute(
     "Files", 
     "Files/{id}", 
     new { controller = "Files", action = "Index" }  
    ); 

的URL映射的基本知識見ASP.NET MVC Routing Overview到控制器方法和ScottGu的優秀URL Routing文章,其中有幾個例子非常接近你想要做的。

+0

感謝您指出這一點 – 2010-04-05 15:03:29

+0

良好的通話路線 – R0MANARMY 2010-04-05 16:11:03

+0

它的工作。我做了一些關於路由的閱讀,並且已經變得清晰。非常感謝你。我很抱歉,我不會標記你的答案,因爲R0MANARMY回答了我的問題,雖然它被誤導了。如果它保持這種狀態會更好。無論如何,再次感謝:) – 2010-04-10 00:30:02