【问题标题】:Razor @Url.Action returns with the optional id parameter to a javascript variableRazor @Url.Action 将可选的 id 参数返回给 javascript 变量
【发布时间】:2013-07-11 22:04:53
【问题描述】:

如果用户当前在参数引用的控制器和操作中,@Url.Action 方法是否打算返回当前 url?

我有一个简单的控制器设置。

OrderableTest/Details/Id
ResultableTest/Details/Id

如果我从家庭控制器(Home/Index)Resultable/Details 调用@Url.Action("Details", "Orderable"),我会将正确的URL 保存到javascript 变量("/Orderable/Details")。但是,如果我在详细信息页面上,则 id 将包含在 url 中。例如,我在页面Orderable/Details/12345 上并调用@Url.Action("Details", "Orderable"),而不是得到"/Orderable/Details" 我得到"/Orderable/Details/12345"。这是预期的功能吗?

路由图是默认的。

根据要求编写 Javascript:

var orderableDetailUrl = '@Url.Action("Details", "Orderable")';
var resultableDetailUrl = '@Url.Action("Details", "Resultable")';
alert(orderableDetailUrl);
alert(resultableDetailUrl);

【问题讨论】:

  • 如果你展示你的javascript并描述你想要实现的目标会有所帮助
  • 我从未遇到过这种行为,您确定按预期使用它吗?
  • UrlHelper 方法使用上下文信息(如当前页面路由数据)来创建 url。所以,是的,这是预期的行为。正如 Dimitry 所说,我们的代码也是如此。

标签: javascript .net asp.net-mvc-4


【解决方案1】:

正如@JotaBe 在上面的 cmets 中提到的,UrlHelper 使用上下文信息。因此,为您当前所在页面调用的 @Url.Action 也将包含可选的 id/参数。

要解决这个问题,您可以将一个空白的可选参数传递给该方法。对于我上面的问题,用下面的代码解决了

var resultableDetailUrl = '@Url.Action("Details", "Resultable", new { id = "" })';
var orderableDetailUrl = '@Url.Action("Details", "Orderable", new { id = "" })';

无论用户当前在哪个页面上,两者都会正确返回 /Orderable/Details/ 和 /Resultable/Details/。

【讨论】:

  • 非常好!这对我帮助很大
猜你喜欢
  • 2015-08-24
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
相关资源
最近更新 更多