.net - ASP.NET MVC Html.ActionLink 结果 URL - 编码方式

标签 .net asp.net-mvc routing html-helper actionlink

我在 MVC Controller 中创建了大量 Action 。

public ActionResult DoSmth1(string token)
public ActionResult DoAnother2(string token)

当我必须调用 ActionLink 时..
=Html.ActionLink<SomeController>( x=> x.DoSmth(item.property), item.property)
=Html.ActionLink<AnotherController>( x=> x.DoAnother(item.property), item.property)

...它为我生成了不同的 URL:
/Some/DoSmth/stringvalue
/Another/DoAnother?property=stringvalue

在哪里设置它构建 URL 的方式?我完全没有想法...((

好的,有一些路灯:
- 如果属性名称与路由模式中使用的相同 - 例如 Controller 、操作和 id - MVC 将 总是 使用路由构建器 (/c/a/id)。

这有点帮助(所以 - 尽可能将参数命名为“id” ))

但总体问题仍然有效......

must be named the same as the token in the route



正是 - 我首先有这个想法。

但是 - 现在我只有默认路由 ({controller}/{action}/{id}) 但仍然有带有斜杠“属性”的 URL ......这很奇怪。
  • 还有一种作弊方式 - 创建一个精确的路由,将给定的 Controller 与其参数名称相匹配 - 似乎这将是最终的答案 - 但我仍然不想这样做((
  • 最佳答案

    您没有显示您的路线,但在此示例中几乎可以肯定您会遇到不同的路线。操作的参数必须与路由中的 token 命名相同,以便生成的 URL 将路由 token 与 ActionLink 的 lambda 形式匹配。与路由标记不匹配的任何内容都将作为查询字符串参数附加到您的第二个 URL 中。查看查询字符串参数是您隐式传递的名称(在本例中为“属性”)与路由标记不匹配的有力证据。由于您使用相同的 token 名称获得不同的结果,因此我得出结论,您走的是不同的路线。顺便说一句,我建议使用 RouteLink 而不是 ActionLink 来构建链接,这样您就可以确定您将匹配哪条路线。

    关于.net - ASP.NET MVC Html.ActionLink 结果 URL - 编码方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/488908/

    相关文章:

    asp.net-mvc - 如何为所有 Controller 编写 Action 过滤器

    c# - 不以某些文字开头的 ASP.NET MVC 路由

    asp.net-mvc - 如何扩展 ASP.NET MVC2 开箱即用验证来验证信用卡/电子邮件?

    asp.net-mvc - 如何设置 MVC 路由来处理旧的 ASP 经典页面重定向

    scala - 喷涂路线: How to respond with different content-types?

    .net - 重定向时将数组或字符串列表从一个操作传递到另一个操作

    .net - 如何在验证之前访问 NumericUpDown 控件的文本?

    c# - 如果类具有 JsonExtensionData,如何使用 Json.NET 订购属性?

    ruby-on-rails - 不要在 Rails 根路由中发布表单

    .net - 云端桌面WPF应用程序部署