如何在 ASP.NET MVC 中使用 Html.ActionLink 调用 JavaScript 函数?

37

如何在ASP.NET MVC中的html.actionlink中调用JavaScript函数?

我想要调用一个JavaScript函数,但是该如何在同一页面的html.actionlink中调用它呢?


对我来说,你试图实现什么并不清楚。Html.ActionLink在服务器上运行,你的JavaScript在客户端上运行;它们之间没有办法相互调用。你是想让某段JavaScript代码在Html.ActionLink创建的链接被点击时执行吗? - Thomas
是的,我想在单击特定链接时调用一个方法。 - Renu123
值得注意的是,如果您的链接仅触发一些JavaScript,例如弹出窗口,并且您实际上不希望用户导航到其他地方,则ActionLink不是您需要的元素。在这种情况下,标准href最好。 - user2903379
6个回答

67

你需要使用htmlAttributes匿名对象,例如:

<%= Html.ActionLink("linky", "action", "controller", new { onclick = "someFunction();"}) %>

你也可以给它一个ID并使用jQuery或其他方法将其附加上去,例如:

<%= Html.ActionLink("linky", "action", "controller", new { id = "myLink" }) %>


$('#myLink').click(function() { /* bla */ });

第一个ActionLink仍然会调用控制器吗?如果是,我该如何禁用它? - Djeroen
1
@Djeroen,好的,我是个白痴,如果我不想让它调用控制器,为什么我需要一个ActionLink? - Djeroen
我们能用 Ajax.ActionLink 实现相同的功能吗? - GreyCloud

26

要在你的操作链接中调用JavaScript,你只需要像这样编写actionlink:

@Html.ActionLink("Delete", "Your-Action", new { id = item.id },
                 new { onclick="return confirm('Are you sure?');"})

不要混淆路由值和HTML属性。


9
<a onclick="MyFunc()">blabla..</a>

在这种情况下,@Html.ActionLink中没有更多可用的内容。Razor本身就足够强大,可以从你能够的地方删除它。


对我来说,这是最好的答案! - Ashi
1
同意。如果只想运行JavaScript函数,这是更正确的答案。当想要调用控制器时,请使用ActionLink,使用上述方法来简单地调用JavaScript函数。 - AxleWack

5
@Html.ActionLink("Edit","ActionName",new{id=item.id},new{onclick="functionname();"})

4

这是一个有些陈旧的帖子,但实际上在ASP.NET中有一种方法可以使用onclick运算符调用函数而不是跳转到其他地方。

helper.ActionLink("Choose", null, null, null, 
    new {@onclick = "Locations.Choose(" + location.Id + ")", @href="#"})

如果在控制器/操作中指定空引号或类似内容,则很可能会将链接添加到您列出的内容中。您可以这样做,并在onclick中返回false。您可以在以下链接中阅读更多信息:添加'return false'到click事件侦听器有什么效果? 如果您在cshtml文件中执行此onclick,最好只指定链接(a href...)而不是使用ActionLink处理它。如果您正在使用HtmlHelper,就像我的上面的示例一样,那么我认为调用ActionLink是一个可以接受的解决方案,或者更好的解决方案是使用tagbuilder。

1

这是我在.cshtml文件中唯一有效的方法:

@Html.ActionLink(
   "Name", 
   "Action", 
   "Controller", 
   routeValues: null, 
   htmlAttributes:new Dictionary<string, object> {{ "onclick", "alert('Test');" }})

我希望这可以帮到你。

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