带有一个必需参数和一个可选参数的ASP.NET MVC路由?
在过去一个月左右的时间里,我一直在研究一个大型MVC应用程序,但这是我第一次需要定义一个自定义路由处理程序,而且我遇到了一些问题。 基本上我有两个参数要通过。 第一个是必需的,第二个是可选的。
我在这里听到这个答案。
这是我的自定义路线:
routes.MapRoute( "MyRoute", "{controller}/{action}/{param1}/{param2}", new { controller = "MyController", action = "MyAction", param1 = "", param2 = "" // I have also tried "UrlParameter.Optional" here. } );
我的动作方法签名:
public ActionResult MyAction(string param1, string param2)
如果我尝试URL http://[myserver]/MyController/MyAction/Test1/Test2
那么它就像我期望的那样工作,param1 =“Test1”和param2 =“Test2”
如果我尝试URL http://[myserver]/MyController/MyAction/Test1
那么两个参数都为null。
希望有人可以告诉我这里我做错了什么,因为我迷路了。
我假设您创建了新路线并保留了与您非常相似的默认路线。 您应该知道遍历路由集合以找到第一个匹配的路由。 所以如果你离开了默认的:
routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults );
在您的路线上方,它将匹配请求到http://[myserver]/My/MyAction/Test1
并调用MyController.MyAction
并将“Text1”设置为名为id
参数。 哪个会失败,因为此操作未声明一个名为id
。
您需要做的是在路线列表中首先移动您的路线,并使其更具体,然后现在:
routes.MapRoute( "Route", "My/{action}/{param1}/{param2}", new { controller = "My", action = "MyAction", param1 = "", param2 = "" });
这将强制通过My
路由的所有流量匹配此路由。
嗨,你这样创造你的溃败,我认为这将扼杀你
routes.MapRoute( "Regis", // Route nameRegister "Artical/{id}", // URL with parameters new { controller = "Artical", action = "Show", id = UrlParameter.Optional } // Parameter defaults );
试试这个
routes.MapRoute("MyRoute", "myRoute/{param1 }/{param2 }", new { controller = "MyController", action = "MyAction", param2 = UrlParameter.Optional }, new { param2 = @"\w+" });
您可以使用“ UrlParameter.Optional ”将一个参数指定为可选,并使用DataType指定第二个参数表示如果传递整数值,则表示DataType(@“\ d +”)和字符串i。
注意: 参数序列非常重要可选参数必须最后传递并在Gloab.asax中的默认路由之前注册新路由 。
然后你的动作链接就像
Test
或者有一个参数
Test
在你的控制器
public ActionResult MyAction(string param2,string param1) { return View() }
- 如何在html动作链接中插入图像? asp.net mvc
- 将多个结果集传递给ASP.NET MVC中的控制器的视图?
- 如何在ASP.Net MVC应用程序中使用来自WCF身份validation服务的身份validationcookie
- 成员表达式无法从可空小数转换为对象
- 如何成功使用existingResponse =“Auto”?
- ASP.NET MVC 6中MVC Controller和Web API Controller有什么区别?
- 强类型视图中多模型表示的模型绑定
- 未找到Visual Studio 2015上的ASP.NET 5 addMvc方法
- 在MVC4中显示和错误,我必须实现一些接口,但我已经完成了它