2012-04-12 92 views
4

而不是只有{controller}/{action}/{id}有可能有多个参数,如 {controller}/{action}/{id}/{another id}MVC 4:多控制器动作参数

我是新来的MVC(来自普通的网页)。如果不可能,MVC是否提供了类似于网页中可用的UrlData的帮助方法?

回答

4

你只需要映射新的路线在Global.asax的,就像这样:

routes.MapRoute(
    "NewRoute", // Route name 
    "{controller}/{action}/{id}/{another_id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional, another_id = UrlParameter.Optional } // Parameter defaults 
); 

然后在您的控制器的动作,你可以拿起参数如下:

public ActionResult MyAction(string id, string another_id) 
{ 
    // ... 
} 
+1

你应该是第一个ID添加到您的动作方法的参数列表:公众的ActionResult MyAction(串号,串another_id)以便让IDS被使用示例操作。 – Tommy 2012-04-12 03:44:39

+0

@Tommy谢谢,已更新 – McGarnagle 2012-04-12 03:45:47

+1

我一直试图在IIS Express和完整的IIS 7上进行此操作,但得到第二个参数的错误404.0。我尝试阅读http://www.asp.net/mvc/tutorials/older-versions/deployment/using-asp-net-mvc-with-different-versions-of-iis-cs,但没有任何帮助。有什么建议么? – DavidHyogo 2013-02-12 02:47:37

3

是的,您可以在路线中定义多个参数。您需要首先在您的Global.asax文件中定义您的路线。您可以在URL段中或URL段的一部分中定义参数。要使用你的榜样,你可以定义为

{controller}/{action}/{id1}/{id2} 

的MVC架构的路线,然后将解析匹配的路由提取ID1和ID2段和它们在你的操作方法分配给相应的变量:

public class MyController : Controller 
{ 
    public ActionResult Index(string id1, string id2) 
    { 
    //.. 
    } 
} 

或者,您也可以接受来自查询字符串或表单变量的输入参数。例如:

MyController/Index/5?id2=10 

路由进行了更详细的讨论here