在尝试清理我的代码库时,我将所有javascript从脚本标记移动到他们自己的javascript文件中。在这之后,我的所有ajax调用都失败了。
这是javascript,这是* .cshtml文件中的完整信息,不包括脚本标记:
$(function () {
$("#weightList").change(function () {
var weight = $("#weightList").val();
var conference = $("#conference").val();
$("#wrestlerAList").prop('disabled', true);
$("#wrestlerBList").prop('disabled', true);
$.ajax({
url: '@Url.Action("GetByWeight", "Wrestler")',
data: {
weight: weight
},
type: 'POST',
success: function (data) {
var wrestlers = "<option></option>";
$.each(data, function (i, wrestler) {
wrestlers += "<option value='" + wrestler.Value + "'>" + wrestler.Text + "</option>";
});
$("#wrestlerAList").html(wrestlers);
$("#wrestlerBList").html(wrestlers);
$("#wrestlerAList").prop('disabled', false);
$("#wrestlerBList").prop('disabled', false);
},
error: function (error) {
alert("An error occurred retrieving the wrestlers for this weight.");
}
});
});
});
我尝试删除“$(function(){...});”但那没用。当javascript不直接在cshtml页面上时,是否还需要其他语法?
编辑:我正在加载我的javascript文件,位于结束标记之前的cshtml文件的最后。
另外,我回来了404。如果代码保持不变,为什么现在会得到404?
答案 0 :(得分:4)
url: '@Url.Action("GetByWeight", "Wrestler")',
该行需要在cshtml页面上呈现。它不会在.js文件中处理。
答案 1 :(得分:1)
问题在于您设置ajax网址的方式
url: '@Url.Action("GetByWeight", "Wrestler")'
ASP.NET MVC标记助手@ Url.Action()在.js文件中不起作用。
您可以将网址放在隐藏的表单字段中并从那里读取。
将此放在.cshtml中的某个地方,最好放在任何表格之外,以便不会因任何原因将其张贴回表格中。
@Html.Hidden("ServiceUrl", Url.Action("GetByWeight", "Wrestler"))
然后使用下面的代码设置jQuery ajax url
url: $('#ServiceUrl').val(),