.JS 文件在 Ajax Url 中使用 @url.action

.JS File using @url.action in Ajax Url

我一直在尝试在另一个外部 .JS 文件中使用 Ajax url 中的 @Url.Action,但不幸的是我没有成功。

这是我的代码:

 $.ajax({
      type: 'post',
      url: "@Url.Action("ClearData","Home")",
      success: function () {

       }
     });

此代码仅在视图内部有效,但在 Javascript externally 中无效。 我已经搜索了一些可能的解决方案,但它似乎与此不同。

有没有其他方法可以在另一个 .Js 文件中使用 @Url.Action

@Url.Action() 是剃刀(服务器端)代码,不在外部文件中解析。选项包括

在主文件中声明一个全局变量,比方说

var url = @Url.Action("ClearData","Home");

然后在外部脚本中使用 ajax 中的 url: url 调用

在您处理的元素中包含一个 data- 属性,例如,如果它是一个按钮单击事件,则

<button data-url="@Url.Action("ClearData","Home")" id="mybutton">

然后在外部文件中读取该值,例如

$('#mybutton').click(function() {
    var url = $(this).data('url');
    $.ajax({
        url: url,
        ....

如果您的 js 代码在视图中

$.ajax({
      type: 'post',
      url: "@Url.Action("ClearData","Home")",
      success: function () {

       }
     });

这是工作

当js代码是一个单独的(外部文件) @Url.Action("ClearData","Home") 无效, 这种情况下你必须写总计 url 或文件夹路径

你可以创建一个部分视图,然后在这个视图里面只是隐藏字段的列表 比如

@Html.Hidden("ActionName", @Url.Action("ActionName", "Controller"))

生成这个

<input id="ActionName" name="ActionName" type="hidden" value="/controller/ActionName">

那么你可以这样称呼它

  var urlAction = $('#ActioName').val();

或者你可以像我一样创建一个 js 函数

 function ActionCaller(actionName)
 {
    return $('#' + actionName).val();
 }

 var action = ActionCaller(ActionName);