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

相关问题