asp.net-mvc - 当匹配不包含该参数的路由时,ActionLinks 恢复为查询字符串参数

标签 asp.net-mvc razor asp.net-mvc-4 asp.net-mvc-routing

我正在努力实现 this将我的应用程序路由更改为如下所示的目标:

hxxp://host/MyController/Widgets/3/AddWhatsit

此路线的 View 将帮助用户将 Whatsit 添加到 Widget 3。

同样,我希望创建新小部件的路线是:

hxxp://host/MyController/Widgets/Create

我创建了单独的路线来尝试促进这一点。他们是:

           routes.MapRoute("DefaultAction",
                            "{controller}/{action}",
                            new {controller = "Home", action = "Index"});

           routes.MapRoute("Default",
                            "{controller}/{id}/{action}",
                            new {controller = "Home", action = "Index", id = UrlParameter.Optional});

我遇到的问题是,当我浏览到小部件的索引页面(/MyController/Widgets,匹配“DefaultAction”路线)时,任何会引入不属于该路线的新网址参数的 ActionLink 都会被转换转换为查询字符串值。因此,例如,Widget 3 的编辑链接将呈现为: 小部件/编辑?id=3 而不是(我更喜欢的): 小部件/3/编辑

我想我知道我没有将我的(可选)id 参数放在路线末尾,从而把事情搞砸了。

我应该忍住并在路线末尾留下 id 吗?

最佳答案

这是有可能实现的。要获得类似于/Home/1/Index 的 anchor 链接,请设置如下路线:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Custom",
        url: "{controller}/{id}/{action}"
        );

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

然后,在 View 中:

@Html.ActionLink("Here", "Index", "Home", new { id = 5 }, null)

您会得到如下所示的链接:

<a href="/Home/5/Index">Here</a>

Quirk 是为了限制自定义路由。在这种情况下我删除了默认值,它们没有意义。当然还有路线的顺序。

关于asp.net-mvc - 当匹配不包含该参数的路由时,ActionLinks 恢复为查询字符串参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15557371/

相关文章:

asp.net-mvc - MVC 绑定(bind)简单的 html 文本框而不使用 html 助手和 Razor

c# - Entity Framework 代码优先迁移

asp.net-mvc - Elmah 未记录 404(缺少文件/图像)

c# - JSON 对象不序列化大数据

asp.net-mvc - SignalR的这些轮询请求来自哪里?

razor - ASP.NET MVC Razor 路线图

javascript - ASP.NET MVC 3 Razor : Include JavaScript file in the head tag

asp.net-mvc - 使用 JSON、JQuery 将复杂对象数组发布到 ASP.NET MVC Controller

asp.net-mvc - 为什么类属性在 Web API 中不起作用?

asp.net - 防止 FormsAuthenticationModule 拦截 ASP.NET Web API 响应