【问题标题】:MVC Url.Action behaves different in different pagesMVC Url.Action 在不同页面中的行为不同
【发布时间】:2013-11-03 20:31:25
【问题描述】:

我看到了 asp .net "Url.Action" 的一个有趣行为。

<a href="@Url.Action("Index", "Soru")" >@baslik</a> 之类的链接在客户端浏览器中显示为<a href="/Soru/Index">denemebaslik</a>,然后用户单击此链接并转到目标页面。

在此目标页面中,<a href="@Url.Action("Index", "Soru")" >@baslik</a> 之类的链接在客户端浏览器中显示为 <a href="/Soru/Index/29271654-e19a-4096-8795-3283d8a208ed">denemebaslik</a>

@Url.Action 在不同页面中的行为不同。我的路线配置是这样的

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

为什么会这样?

【问题讨论】:

  • 你确定你没有向方法调用传递任何额外的参数吗?页面上运行的任何 JS 可能会修改 href?
  • 没有 js 动作来操作或传递额外的参数。我检查了萤火虫,链接看起来像这样。这种行为是在我更改路由配置后开始的。
  • MVC 会在当前页面的查询字符串中提取参数,并在渲染指向同一路由的链接时包含它们,基本保留现有参数。 guid (2927...) 是否出现在查询字符串中?如果是这样,MVC 会选择它。
  • @SimonGoldstone 是的,你是对的,guid 出现在查询字符串中。问题是为什么会这样,它的优点是什么,当不需要查询字符串时我该怎么办?

标签: asp.net-mvc url-action


【解决方案1】:

MVC 会在当前页面的查询字符串中提取参数,并在渲染指向同一路由的链接时包含它们,基本上保留现有参数。

如果这是您遇到的情况 - 这是设计使然。这意味着,对于操作链接指向页面本身的情况,参数已经为您准备好了。例如,如果您有“升序/降序”链接,则其他参数(例如价格/描述)将继续包含在链接中,而您不必每次都对其进行编码。

如果你不想要额外的参数,用空字符串指定参数,像这样

<a href="@Url.Action("Index", "Soru", new { id = "" })">@baslik</a>

请注意,您不能将null 分配给参数,因为它是匿名类型。空字符串可以正常工作。

顺便说一句,我相信你知道这一点,但你也可以使用更方便的@Html.ActionLink

@Html.ActionLink(baslik, "Index", "Soru", new { id = "" })">

希望对你有所帮助。

【讨论】:

    猜你喜欢
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 2011-08-20
    • 2013-12-04
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多