在JavaScript中使用Url.Action

19

我正在尝试使用Url.Action方法来正确生成ajax调用所需的URL,但是在尝试构建RouteValues时遇到了问题,以下是有问题的代码行:

var url = @Url.Action("ViewFile", "Default", new { itemId = $(this).data("itemid") });

你可以看到,我正在尝试将JQuery $(this).data("itemid") 的结果分配给RouteValues中的itemId

是否有一种使用Razor语法的方法可以使此代码编译通过?

2个回答

35

你把客户端和服务器端搞混了。试试这样做:

var url = '@Url.Action("ViewFile", "Default")?itemId=' + $(this).data("itemid");

当您使用Razor视图引擎编写@时,您正在编写一条指令,该指令将在服务器端处理。在您的情况下,您想要添加一个来自JavaScript的参数到URL中,因此,只需在客户端上使用@Url助手生成的URL与值进行连接(concat)。

PS:我假设您正在使用默认路由表。


3
当服务器端代码执行时,JQuery当然无法运行,我太傻了。谢谢。(羞愧地低下头) - philreed
1
提醒一下,这将无法在 Views 之外的 JavaScript 上运行。 - AdorableVB

14

另一种方法是创建占位符,然后进行替换:

var url = '@Url.Action("GetOrderDetails", "Home", new { id = "js-id" })'
              .replace("js-id", encodeURIComponent(rowId)); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接