【发布时间】:2016-08-17 12:26:58
【问题描述】:
我有以下操作
public ActionResult TemplateBuilder(int id, int? processId) { }
然后我有以下
@Url.Action("TemplateBuilder","InspectionTemplate")/id/processId
然后网址看起来像:InspectionTemplate/TemplateBuilder/1/2
但是如果我使用
return RedirectToAction("TemplateBuilder","InspectionTemplate", new { id=1, processId = 2});
然后我得到以下结果:InspectionTemplate/TemplateBuilder/1?processId=2
我该如何解决这个问题。
这是我的路线
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "IDRoute",
url: "{controller}/{action}/{id}",
defaults: new
{
controller = "Login",
action = "Index",
id = UrlParameter.Optional
}
);
routes.MapRoute(
name: "ProcessRoute",
url: "{controller}/{action}/{id}/{processId}",
defaults: new
{
controller = "InspectionTemplate",
action = "TemplateBuilder",
id = UrlParameter.Optional,
processId = UrlParameter.Optional
}
);
routes.MapRoute(
name: "DateRoute",
url: "{controller}/{action}/{year}/{month}/{day}",
defaults: new
{
controller = "Inspection",
action = "Assign",
year = UrlParameter.Optional,
month = UrlParameter.Optional,
day = UrlParameter.Optional
}
);
}
【问题讨论】:
-
把
id = UrlParameter.Optional,从ProcessRoute中去掉(只有最后一个参数可以是可选的)并把它改成url: "InspectionTemplate/{action}/{id}/{processId}",所以它是特定的,并将它移动到第一条路线(顺序很重要) -
它不起作用:(
-
没关系,它忘记了将它移到顶部。添加为答案,以便我接受它
-
请注意,我回滚了您的编辑,以便答案和 cmets 有意义
标签: c# asp.net asp.net-mvc routing