2012-10-31 159 views
1

我知道你可以通过像.com/MyPage/?controlID=5这样的网址传递参数,但是你怎么用.com/MyPage/5这样的东西来做呢?因此不需要变量名称或问号。使用MVC通过url传递参数?

回答

5

工作,你需要定义一个定制的路线,或使用模型绑定,以获得预期的效果。在你的情况,该路线将是这样的:

routes.Add("someRoute", 
    "{controller}/{action}/{controlId}", 
    new { controller = "Home", action = "Index", controlId = UrlParameter.Optional } 
    ); 

public ActionResult Index(int? controlId) 
{ 
} 

现在,唯一的“疑难杂症”与这条路线是,如果你也有指定的默认路由,这两条航线将成为争夺,第一个你已经定义了会赢。如果存在某种形式的差异化值(比如,controlId总是匹配某种模式),那么您总是可以向路由添加HttpRouteConstraint以区分新路由和默认路由。

或者,你可以在你的操作方法,重命名参数,如果你仍在使用默认路由,是id,并更改您的查询字符串键“ID”:

public ActionResult Index(int? id) 
{ 
    // Do Stuff 
} 
+0

这工作完美,你是非常彻底和清晰,非常感谢你! – Smoore

+0

有没有一种方法可以设置HttpRouteConstraint来确定像int或string之类的东西,还是它必须是像“POST”或“GET”之类的东西? – Smoore

+1

当然 - 查看[this](http://www.asp.net/mvc/tutorials/controllers-and-routing/creating-a-route-constraint-cs)文章,了解如何制作约束。 – Tejs

2

在MyPageController创建方法:

public ActionResult Index (int id) 
{ 
} 

将与默认路由

+0

我想,和它的工作原理,但仅限于需要输入变量名称和问号的方式,是否可以在没有这些的情况下执行? – Smoore