MVC 相当于 @Html.ActionLink 通过 javascript

MVC equivalent of @Html.ActionLink through javascript

本文关键字:通过 javascript ActionLink @Html 相当于 MVC      更新时间:2023-09-26

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

javascript是一种客户端语言,它对你正在使用的服务器端语言一无所知。因此,在 javascript 中没有等效的服务器端帮助程序使用服务器端路由定义生成 url 是正常的。

目前还不清楚您要实现的目标,但是如果您想通过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>

如果你想在单独的javascript文件中使用此url,而你无法访问服务器端的帮助程序,你仍然可以根据情况,在某个DOM元素中包含这个url。

例如:

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

请注意我们嵌入到 DOM 中的 data-url HTML5 属性,并使用服务器端帮助程序来确保生成的 url 根据我们的路由定义始终正确。 现在我们可以在一个单独的 javascript 文件中不显眼地订阅这个div 的点击事件并检索 url:

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

其他例子显然包括标准<a><form>元素,这些元素应该使用服务器端HTML帮助程序生成,然后你所要做的就是在单独的javascript文件中获取它们相应的hrefaction属性来检索实际的url并对其进行处理。

另一种选择是将URL存储在页面上某处的隐藏<div>中,稍后通过Javascript调用它。它看起来像这样:

Index.cshtml

<div style="display: none;" id="url">
   @Url.Action("SomeAction", "SomeController")
</div>

然后,您可以在 Script.js 文件中使用它来构建所需的任何链接。

var url = $("#url").text();

然后,URL 变量将包含指向 /SomeController/SomeAction 的网页安全链接。