Javascript 外部js文件中的Asp.Net Mvc Url.Action?

Javascript 外部js文件中的Asp.Net Mvc Url.Action?,javascript,asp.net-mvc,Javascript,Asp.net Mvc,在外部js文件中,我无法使用 url = "@Url.Action("Action", "Controller")" //url output : @Url.Action("Action", "Controller") //I get IllegalPath Name error. 当我这样写的时候: url = "/Controller/Action" 若项目位于子文件夹下,那个么脚本就不能工作。我需要这样的内容作为相对Url: url = "~/Controller/Action"

在外部js文件中,我无法使用

url = "@Url.Action("Action", "Controller")" 
//url output : @Url.Action("Action", "Controller")
//I get IllegalPath Name error.
当我这样写的时候:

url = "/Controller/Action"
若项目位于子文件夹下,那个么脚本就不能工作。我需要这样的内容作为相对Url:

url = "~/Controller/Action"

ı怎么能做到这一点?谢谢。

我不确定这是否是最优雅的解决方案,但我所做的是区分寄存器和外部脚本中的实际实现,以便:

<script>...</script>
... include all the external scripts I need

$(document).ready(function(){

    //get all the information you need from your MVC context 
    //before going out of context and into the scripts
    var url = '@Url.Action("Action", "Controller")'; 


     RegisterMyFunction(url, other parameters ..);
     RegisterAnotherFunction(url, others...);
}
。。。
... 包括我需要的所有外部脚本
$(文档).ready(函数(){
//从MVC上下文中获取所需的所有信息
//在脱离上下文并进入脚本之前
var url='@url.Action(“Action”、“Controller”);
RegisterMyFunction(url、其他参数..);
RegisterOnotherFunction(url、其他…);
}
因此,在我的视图中,我只有寄存器函数,脚本包含特殊值作为参数,可以执行我想要的任何操作


希望能有所帮助,

由于asp.net mvc视图引擎无法解析.js文件,因此您根本无法在其中使用任何c代码。我建议您使用不引人注目的方法,类似这样的方法

<div id="loader" data-request-url="@Url.Action("Action", "Controller")"></div>

这是我一直在使用的一种模式。它有更多的步骤,但我喜欢我的所有URL都在视图中的一个有组织的位置

在视图的底部,我将包括一个脚本部分,其中包含如下URL:

@section Scripts
{
    <script type="text/javascript">
        myJavaScriptObject.firstUrl = '@Url.Action("Action1", "Controller", new {id = Model.Id})';
        myJavaScriptObject.secondUrl = '@Url.Action("Action2", "Controller", new {id = Model.Id})';
    </script>
}

我意识到这些条目不需要在类内部引用,但我喜欢将它们放在那里作为我自己的内务处理。

正如公认的答案所述,你不能在外部JS文件中使用任何C代码。如果我需要将一些控制器链接传递到我的外部.JS文件,我通常会这样做

在C#(.cshtml)中


可以使用隐藏字段执行相同的操作(在主视图/单个视图上)

查看页面:

@Html.Hidden("commonUrlTrack", Url.Action("Action_Method_Name", "Controller_Name"))

<button onclick="commonFunction()">Click Me</button>

那么
url='~'+'@url.Action(“Action”,“Controller”)”
@url.Action(“Action”,“Controller”)
输出是
@url.Action(“Action”,“Controller”)
那么您的建议输出是
~@url.Action(“Action”,“Controller”)
我需要
站点/子文件夹/控制器/操作
我会将周围的引号设为单引号
,因此它们在视觉上不同于
Url.Action方法的引号。无论如何,类似这样的方法是可行的(+1)@Chips_100谢谢老兄,你说得对,我修改了代码以提高可读性。非常优雅的解决方案。谢谢你!提示顶部-谢谢你。事后完全有意义。是时候将大量JQUery外包给外部脚本了。再次感谢!从2019年起竖起大拇指!8年前,有人优雅地处理了这个问题,因为EverThank这似乎对我来说很有帮助在网站下创建web应用程序。这是一个好方法,而不是硬编码
var myJavaScriptObject = {
    firstUrl: '',
    secondUrl: '',
    docReady: function() {
        $.get(myJavaScriptObject.firstUrl, function(data) { do something...  });
    }
}
<script src="~/js/myfile.js"></script>

<script type="text/javascript">

    var url1 =  "@Url.Action("ActionName", "ControllerName", new { Param = ViewBag.Param })";  
    var url2 = "@Url.Action("AnotherAction", "AnotherController")";

    $(function() {
        window.initScript(url1, url2);
    });

</script>
var _url1;
var _url2;

function initScript(url1, url2) {
    _url1 = url1;
    _url2 = url2;

   // other init. codes...

}
@Html.Hidden("commonUrlTrack", Url.Action("Action_Method_Name", "Controller_Name"))

<button onclick="commonFunction()">Click Me</button>
function commonFunction() {
    var url = $("#commonUrlTrack").val();        
    alert(url);        
}