移动javascript到单独的文件,ajax调用给出错误

时间:2015-02-18 18:11:06

标签: javascript c# jquery ajax asp.net-mvc

在尝试清理我的代码库时,我将所有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?

2 个答案:

答案 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(),