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

标签 asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing asp.net-mvc-areas

我正在尝试映射某些路线,以便自动生成的网址看起来像 Admin/controller/action/param 这两个代码块, @Url.Action("action","controller",new{id="param"})@Url.Action("action","controller",new{type="param"})

我在区域注册中做了如下操作,

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

的内容

有没有一种方法可以生成类似于 controller/action/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

发生这种情况是因为第一个路由用于映射 url(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 .

关于asp.net-mvc - 具有不同参数名称的 Asp.Net 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6669596/

相关文章:

asp.net - MVC3 - 向 Controller 添加文件夹?

asp.net-mvc-3 - mvc 3站点地图提供程序-指向同一节点的多个路径

asp.net-mvc-3 - ASP.Net MVC3路由保留字?

asp.net-mvc - 如何将同一 url 的 GET 和 DELETE 请求路由到不同的 Controller 方法

javascript - 脚本包中的 ASP.NET MVC {version} 通配符选择调试版本?

asp.net-mvc - asp.net mvc 4 - 谁调用_ViewStart.cshtml,步骤顺序是什么

c# - asp.net mvc 在 ActionResult 中多次循环后什么都不做

asp.net-mvc - 从 Asp.net MVC 发送 HTML 电子邮件的最佳方式是什么?

jquery - 将 ASP.NET MVC 3 ViewModel 渲染为 ListView、Accordian 或 Razor View 中的简单列表

c# - MVC 不路由到我的 Controller 的操作结果之一?