MVC相当于@ Html.ActionLink通过javascript

Mar*_*tin 12 javascript asp.net-mvc

如何通过javascript代码编写等效的@ Html.ActionLink,即调用MVC操作,然后创建一个新视图而不返回到调用视图?

Dar*_*rov 27

javascript是一种客户端语言,它不知道您正在使用的服务器端语言.因此,使用服务器端路由定义生成URL的服务器端帮助程序的javascript中没有等效项是正常的.

目前还不是很清楚你想要实现什么,但是如果你想通过javascript使用调用一些url,你可以使用服务器端助手生成这个url:

<script type="text/javascript">
    var url = '@Url.Action("SomeAction", "SomeController")';
    // do something with the url client side variable, for example redirect
    window.location.href = url;
</script>
Run Code Online (Sandbox Code Playgroud)

如果你想在一个单独的javascript文件中使用这个url,你无法访问服务器端助手,你仍然可以根据情况在一些DOM元素中包含这个url.

例如:

<div id="foo" data-url="@Url.Action("SomeAction", "SomeController")">Click me</div>
Run Code Online (Sandbox Code Playgroud)

请注意data-url我们嵌入到DOM中的HTML5属性,并使用服务器端帮助程序来确保生成的URL始终基于我们的路由定义是正确的.现在我们可以在一个单独的javascript文件中不引人注意地订阅此div的click事件并检索url:

$('#foo').click(function() {
    var url = $(this).data('url');
    // do something with the url client side variable, for example redirect
    window.location.href = url;
});
Run Code Online (Sandbox Code Playgroud)

其他示例显然包括应使用服务器端HTML帮助程序生成的标准<a><form>元素,然后您在单独的javascript文件中所要做的就是获取其对应的hrefaction属性以检索实际的URL并对其执行某些操作.

  • @DarinDimitrov 我们可以将参数传递给这段代码中的特定操作 '@Url.Action("SomeAction", "SomeController")' 吗? (2认同)