Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用MVC通过url传递参数?_C#_Html_Asp.net Mvc_Razor_Asp.net Mvc Routing - Fatal编程技术网

C# 使用MVC通过url传递参数?

C# 使用MVC通过url传递参数?,c#,html,asp.net-mvc,razor,asp.net-mvc-routing,C#,Html,Asp.net Mvc,Razor,Asp.net Mvc Routing,我知道你可以通过像.com/MyPage/?controlID=5这样的URL传入参数,但是你怎么能用像.com/MyPage/5这样的东西呢?因此不需要变量名或问号。在MyPageController中创建一个方法: public ActionResult Index (int id) { } 这将与默认管线一起使用您可以定义自定义管线,或使用模型绑定来获得预期效果。在您的情况下,路线如下所示: routes.Add("someRoute", "{controller}/{actio

我知道你可以通过像
.com/MyPage/?controlID=5
这样的URL传入参数,但是你怎么能用像
.com/MyPage/5
这样的东西呢?因此不需要变量名或问号。

在MyPageController中创建一个方法:

public ActionResult Index (int id)
{
}

这将与默认管线一起使用

您可以定义自定义管线,或使用模型绑定来获得预期效果。在您的情况下,路线如下所示:

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
}

我试过了,效果很好,但只适用于需要输入变量名和问号的方式,是否可以在没有这些的情况下进行操作?这非常有效,您非常彻底和清晰,非常感谢!有没有一种方法可以设置HttpRouteConstraint来确定int或string之类的内容,或者它必须是“POST”或“GET”之类的内容?当然可以-查看文章了解如何设置约束。