我正在改变ASP.NET,MVC和C#应用程序,但routes.MapRoute
条目未按预期工作。在我的Global.asax.cs文件中,我有以下两条路线 -
routes.MapRoute(
"MyRoute1", // Route name
"{controller}/{action}/{something}/{name}/{id}/{myParameterA}",
new { controller = "MyController", action = "MyActionA", category = "something", name = "name", id = "id", myParameterA = "myParameterA" });
routes.MapRoute(
"MyRoute2", // Route name
"{controller}/{action}/{something}/{name}/{id}/{myParameterB}",
new { controller = "MyController", action = "MyActionB", category = "something", name = "name", id = "id", myParameterB = UrlParameter.Optional } );
我的控制器中的代码如下所示 -
public ActionResult MyActionA(string something, string name, string id, string myParameterA)
{
//do cool stuff!
}
public ActionResult MyActionB(string something, string name, string id, string myParameterB)
{
//do awesome stuff!
}
当我致电MyActionB
时,即使参数位于网址中,最终参数myParameterB
也会作为 null 进入控制器 - (例如:/ MyController / MyActionB / aThing / aName / 123/456)。
我做希望最终参数(上例中的'456')是可选的。
MyActionA
工作正常。
任何建议将不胜感激!
另外,有关routes.MapRoute
如何运作的好参考吗?
谢谢!
答案 0 :(得分:0)
不确定,但我认为交换两者,当你在第一个上设置“myParameterA =”myParameterA“”时,你传递/ MyController / MyActionB / aThing / aName / 123/456时指定一个默认值url映射到第一个,但是数字456与默认字符串值不兼容 - 因此传递为null。
编辑:哦,为了一个很好的参考,Apress Pro MVC 3有一个很好的章节--Safari Informit。
答案 1 :(得分:0)
这是因为一旦用路径本身的字符串替换参数,就没有什么可以区分这两条路线。如果向路径添加静态部件,则应该能够区分它们。
routes.MapRoute(
"MyRoute1", // Route name
"{controller}/{action}/{something}/{name}/{id}/firstroute/{myParameterA}",
new { controller = "MyController", action = "MyActionA", category = "something", name = "name", id = "id", myParameterA = "myParameterA" });
routes.MapRoute(
"MyRoute2", // Route name
"{controller}/{action}/{something}/{name}/{id}/secondroute/{myParameterB}",
new { controller = "MyController", action = "MyActionB", category = "something", name = "name", id = "id", myParameterB = UrlParameter.Optional } );
看看是否有效。