3

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

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

OrderableTest/Details/Id
ResultableTest/Details/Id

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

路由图是默认的。

按要求编写 Javascript:

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

1 回答 1

6

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

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

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

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

于 2013-07-12T13:39:19.727 回答