C# AJAX路径不正确
我有一个带有几个级联下拉列表的web应用程序。因此,我使用ajax更新下一个下拉列表的值。我将javascript脚本放在一个单独的文件中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
// 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")';