Skip to main content
 首页 » 编程设计

c#之AJAX 路径不对

2024年05月06日42jackei

我有一个带有几个级联下拉列表的网络应用程序。所以我使用 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() 

当我从 Visual Studio 中运行代码时,代码可以正常工作。当我将它部署到我的本地 Web 服务器时它不起作用。我将它部署到

http://localhost/mea 

当我在 Chrome 中打开开发者工具时,我看到了错误。

POST http://localhost/~/WorkOrderSubmissions/GetLinesByWorkorderJson 404 (Not Found) 

我试图将 url 更改为

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

它们都不起作用。我认为 ~ 应该转到 Web 应用程序的根目录,即 http://localhost/mea .

请您参考如下方法:

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

var url = '@Url.Content("~/WorkOrderSubmissions/GetWorkstationsByActivityJson")'; 

或者更好的是:

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