【问题标题】:ASP.NET MVC Html.ActionLink result URL - the way of encodingASP.NET MVC Html.ActionLink 结果 URL - 编码方式
【发布时间】:2009-01-28 19:05:53
【问题描述】:

我在 MVC 控制器中创建了大量的动作。

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 的方式?我一点头绪都没有……((


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

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

但整体问题还是成立的……


必须与路由中的token同名

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

但是 - 现在我只有默认路由 ({controller}/{action}/{id}) 但仍然有带有斜杠“属性”的 URL...这很奇怪。

  • 还有一种欺骗方式 - 创建一个精确的路由来匹配给定控制器及其参数名称 - 这似乎是最终的答案 - 但我仍然不想这样做((

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多