C# AJAX路径不正确

C# AJAX路径不正确,c#,jquery,asp.net-mvc-4,asp.net-ajax,C#,Jquery,Asp.net Mvc 4,Asp.net Ajax,我有一个带有几个级联下拉列表的web应用程序。因此,我使用ajax更新下一个下拉列表的值。我将javascript脚本放在一个单独的文件中 // Code that triggers when there is a change in Activity drop down. $('#ActivityId').change(function () { var activityId = $(this).val(); // Empty the Workstat

我有一个带有几个级联下拉列表的web应用程序。因此,我使用ajax更新下一个下拉列表的值。我将javascript脚本放在一个单独的文件中

// Code that triggers when there is a change in Activity drop down.
    $('#ActivityId').change(function () {
        var activityId = $(this).val();

        // Empty the Workstation.
        $('#WorkstationId').empty();

        $('.showhide-workstation').show();

        var url = "~/WorkOrderSubmissions/GetWorkstationsByActivityJson";
        // AJAX call that re-populate Workstation drop down depending on the Activity selected.
        $.ajax({
            type: 'POST',
            url: url,
            dataType: 'json',
            data: { activityId: activityId },
            success: function (codes) {
                $('#WorkstationId').append('<option value=""></option>');
                $.each(codes, function (i) {
                    $('#WorkstationId').append('<option value = "' + codes[i].Value + '">' + codes[i].Text + '</option>');
                });
            },
            error: function (ex) {
                $('#WorkstationId').append('<option value=""></option>');
            }
        }); // END $.ajax() on GetRejectCodesByActivityJson
    }); // END $('#ActivityId').change()
当我在Chrome中打开开发者工具时,我看到了错误

POST http://localhost/~/WorkOrderSubmissions/GetLinesByWorkorderJson 404 (Not Found)
我试图将url更改为

url = ~/WorkOrderSubmissions/GetLinesByWorkorderJson
url = /WorkOrderSubmissions/GetLinesByWorkorderJson
url = WorkOrderSubmissions/GetLinesByWorkorderJson

它们都不起作用。我认为~应该指向web应用程序的根,即。

只有ASP.Net才能识别
~
语法;任何JS代码都会从字面上理解它。您需要通过C#代码向JS提供URL:

var url = '@Url.Content("~/WorkOrderSubmissions/GetWorkstationsByActivityJson")';
或者更好:

var url = '@Url.Action("GetWorkstationsByActivityJson", "WorkOrderSubmissions")';

旁注:显然,在JavaScript中呈现时,您需要正确编码Url(单独的常见问题)将JS与HTML分开是一种很好的做法,因为你需要通过一些其他方式传递这样的url,比如一些HTML元素的
data-
属性。我将JS脚本分开的原因是我有多个级联下拉列表。如果我把它放在那里,它会使_Layout.cshtml变得又长又难看。是否有方法将@Url.Content传递到script.js文件?是的,有-这将是在@AlexeiLevenkov提到的相关元素上提供请求的Url作为
数据
属性的模式。
var url = '@Url.Action("GetWorkstationsByActivityJson", "WorkOrderSubmissions")';