Razor@Url.Action返回一个javascript变量,并带有可选的id参数

Razor @Url.Action returns with the optional id parameter to a javascript variable

本文关键字:参数 id 变量 返回 Action javascript 一个 Razor@Url      更新时间:2023-09-26

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

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

OrderableTest/Details/Id
ResultableTest/Details/Id

如果我从家庭控制器(Home/Index)Resultable/Details调用@Url.Action("Details", "Orderable"),我将获得保存到javascript变量("/Orderable/Details")的正确URL。然而,如果我在"详细信息"页面上,则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);

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

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

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

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