【问题标题】:Url.Action method is returning wrong url stringUrl.Action 方法返回错误的 url 字符串
【发布时间】:2021-07-23 15:57:44
【问题描述】:

我正在尝试使用以下代码生成 url 字符串:

var x = @Url.Action("AddOrEditSaleOffer", "BuildingOffers", null);

但是,返回的值会以某种方式生成以下 url:

/BuildingOffers/AddOrEditSaleOffer/7

其中 7 是一个数字,它会根据上次编辑的商品的 ID 而变化。

代码在局部视图中,使用 ajax 调用并在对 Building Offer 记录进行编辑后调用。我希望得到 NO id,但 url 以某种方式附加了一个 id。

更新:

我发现以下问题有助于理解我为什么会遇到这个问题,并建议了解决方法:Prevent ambient route values from the URL from being added to Html.Action and Html.ActionLinks automatically in ASP.NET

此外,Microsoft Docs 中的以下部分。讨论这个问题:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing?view=aspnetcore-5.0#url-generation-reference

【问题讨论】:

  • 如果省略null 参数会怎样?
  • 我得到的结果与 null 存在时相同。 (id 还是通过了)。
  • 奇怪的是它在第一次生成时可以正常工作,但是当我在编辑记录后使用 ajax 调用该页面时,它传递了我刚刚更新的记录的 id。
  • 为什么不只使用 var x = " /BuildingOffers/AddOrEditSaleOffer" ???
  • @Sergey 使用Url.Action 被认为更健壮。路由模式可能会改变,然后字符串会中断,而 Url.Action 会生成正确的 url。

标签: c# html asp.net asp.net-mvc asp.net-core


【解决方案1】:

如果你不想在你的url中发送参数,你可以使用另一个Action方法重载,它将控制器和动作作为输入参数。

var url = @Url.Action("AddOrEditSaleOffer", "BuildingOffers");

【讨论】:

  • 我试过这个但产生了相同的输出。 (它仍然通过了之前编辑的记录的 id )。
【解决方案2】:

你可以使用这样的东西

 string url = " /controllerName/ActionName

:)

【讨论】:

  • 感谢您的建议。我认为这可能会解决问题,但我想知道为什么我的代码不起作用。
  • 正如上面 cmets 所指出的:“路由模式可能会改变,然后文字字符串会中断,而 Url.Action 会生成正确的 url。”
  • 在Action函数中你使用的描述是:生成具有特定路由值的URL,也许就是为了它。请如果答案有用,请评分。
猜你喜欢
  • 2018-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-05
  • 2011-02-23
  • 1970-01-01
  • 2021-02-11
  • 1970-01-01
相关资源
最近更新 更多