我在Html方面有问题.当我有一条包含多个参数的路由时,使用ActionLink.例如,考虑到我的全球计划中定义的以下路由.asax文件:

routes.MapRoute(
    "Default",                                              // Route name
    "{controller}.mvc/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

routes.MapRoute(
    "Tagging",
    "{controller}.mvc/{action}/{tags}",
    new { controller = "Products", action = "Index", tags = "" }
);

routes.MapRoute(
    "SlugsAfterId",
    "{controller}.mvc/{action}/{id}/{slug}",
    new { controller = "Products", action = "Browse", id = "", slug = "" }
);

前两条路由运行正常,但当我try 使用以下方法创建指向第三条路由的操作链接时:

<%= Html.ActionLink(Html.Encode(product.Name), "Details", new { id = product.ProductId, slug = Html.Encode(product.Name) }) %>

我最终得到一个类似[site-root]/Details/1?slug=url-slug的URL,而我希望URL更像[site-root]/Details/1/url-slug

有人能看出我错在哪里吗?

推荐答案

它使用的是完全满意的第一条路由.试着把你的SlugsAfterId路由放在Default路由之上.

它基本上是这样的:"判断默认值.有动作吗?是的.有id吗?是的.使用这个,并在querystring中丢弃任何其他参数."

作为补充说明,这样做将使Default route变得多余,因为您为slug参数提供了一个默认值.

Asp.net相关问答推荐

实体框架核心:DBCommand执行得更快,但总时间要慢10倍

Asp.Net Core 创建一个控制器来使用 SendGrid 发送邮箱

如何在 MVC 中为国家和州/省创建 Select 列表

我们可以在一个网页中使用多个表单吗?

您如何处理多个环境的多个 web.config 文件?

ASP.NET web api 无法获取 application/x-www-form-urlencoded HTTP POST

Asp.Net 会话在 ashx 文件中为空

无法让嵌套在 UpdatePanel 中的 WebControl 中的 ScriptManager.RegisterStartupScript 工作

你如何确定哪个验证器失败了?

Twitter bootstrap glyphicons 不会出现在发布模式 404 中

Httpclient 该实例已经启动了一个或多个请求.只能在发送第一个请求之前修改属性

在 asp.net 中调整图像大小而不会丢失图像质量

IIS 10 上的 ASP.NET Core 404 错误

在 Visual Studio 2010 Professional 中找不到请求的 .Net Framework 数据提供程序

MVC 4 - Razor - 将变量传递到 href url

如何获取当前登录用户的角色列表

协调 ASP.NET 脚本包和源映射

ExecuteReader:连接属性尚未初始化

DataTable 不包含 AsEnumerable 的定义

如何使 URL 重写与 web.Release.config 转换一起工作?