当前位置 : 主页 > 网络编程 > ASP >

asp.net-mvc – 具有不同参数名称的Asp.Net路由

来源:互联网 收集:自由互联 发布时间:2021-06-24
我正在尝试映射某些路由,以便自动生成的Urls看起来像 这两个代码块的Admin / controller / action / param, @ Url.Action(“action”,“controller”,new {id =“param”})和 @ Url.Action( “行动”, “控制器”
我正在尝试映射某些路由,以便自动生成的Urls看起来像
这两个代码块的Admin / controller / action / param,
@ Url.Action(“action”,“controller”,new {id =“param”})和
@ Url.Action( “行动”, “控制器”,新的{类型= “参数”})

我所做的是在区域注册中的以下内容,

context.MapRoute(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            new { action = "Index", 
                  id = UrlParameter.Optional }, 
            new string[] { "namespaces" });

        context.MapRoute(
            "Admin_type",
            "Admin/{controller}/{action}/{type}",
            new { action = "Index", 
                  type = UrlParameter.Optional }, 
            new string[] { "namespaces" });

当参数名称为id时,生成的url是预期的,但是当参数名称是type,而不是controller / action / typevalue时,它会生成类似controller / action /?type = typevalue的内容

有没有办法生成像控制器/动作/类型值的url保持Admin_default路由的生成器行为完整?

when parameter name is id, url generated is as expected, but when
parameter name is type, instead of controller/action/typevalue, it
generates something like controller/action/?type=typevalue

发生这种情况是因为第一条路线用于映射网址(ID是可选的).

您可以尝试为路线添加一些约束.我猜你的id参数是一个整数,type参数是一个字符串.在这种情况下,您可以尝试使用此路线:

context.MapRoute(
                "Admin_default",
                "Admin/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }, 
                new { id = @"\d+" },    
                new string[] { "namespaces" });

context.MapRoute(
                "Admin_type",
                "Admin/{controller}/{action}/{type}",
                new { action = "Index", type = UrlParameter.Optional }, 
                new string[] { "namespaces" });

您可以找到有关路线约束here的更多信息.

网友评论