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

.net .JS文件,在Ajax url中使用@url.action,.net,asp.net-mvc-4,.net,Asp.net Mvc 4,我一直试图在另一个外部的.JS文件中使用AjaxUrl内部的.Action,但不幸的是我没有运气 这是我的密码: $.ajax({ type: 'post', url: "@Url.Action("ClearData","Home")", success: function () { } }); 此代码仅在视图本身内部工作,而不在外部的Javascript中工作。 我们已经找到了一些可能的解决办法,但似乎与此不同 在另一个.Js文

我一直试图在另一个外部的
.JS
文件中使用Ajax
Url
内部的
.Action
,但不幸的是我没有运气

这是我的密码:

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

       }
     });
此代码仅在视图本身内部工作,而不在外部的Javascript中工作。 我们已经找到了一些可能的解决办法,但似乎与此不同

在另一个
.Js
文件中使用
@Url.Action
是否有其他方法?

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

在主文件中声明全局变量,例如

var url = @Url.Action("ClearData","Home");
然后在外部脚本中,在ajax调用中使用
url:url

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

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

如果您的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">
或者你可以像我一样创建一个js函数

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

 var action = ActionCaller(ActionName);

谢谢@Stephen它工作得很好。。我正在使用图像控件将您的按钮更改为img,并将任何用户选择的图像带入图像控件本身。@user3559349我不知道是否正确理解您的意思,但我不需要在主文件中声明全局变量。一旦我在正在处理的元素中添加了
data-
属性,然后读取外部文件中的值,正如您所说的
var url=$(this.data('url'),工作正常。谢谢您的回答。@user3559349非常感谢您我使用了您的解决方案,但我使用了一个隐藏字段,如:
并从jquery调用它
var url=$('#hidUrl')。data('url')。它工作得很好。
  var urlAction = $('#ActioName').val();
 function ActionCaller(actionName)
 {
    return $('#' + actionName).val();
 }

 var action = ActionCaller(ActionName);