调用控制器方法的MVC jquery不起作用

时间:2012-10-27 00:19:49

标签: jquery asp.net-mvc

我想根据另一个下拉列表的选择填充一个下拉列表。

我知道这是一个相当普遍的问题,整整两天我一直在尝试网上找到的不同样本,但无济于事!

这是我的代码:

控制器:

 public List<SelectListItem> listTestCases(string id)
    {
        IQueryable<SelectListItem> A = repository.listTestCases(id);
        return (A.toList());
    }

    public JsonResult listTestCases_2(string id)
    {
        IQueryable<SelectListItem> A = repository.listTestCases(id);
        return Json(A);
    }

我有两个方法,其中一个返回一个List,另一个返回JSONResults,我尝试了两种方法在网上找到的所有方法。 脚本:

<script>
$(document).ready(function() {
    $('select#testCategoriesUniqueId').change(function() {

        var testCategory = $(this).val();
        $.ajaxSetup({ cache: false });
        alert(testCategory);

        $.getJSON("TestInput/listTestCases/" ,  {id: testCategory}, function(data) {
            alert("here");
        });

    });
});

使用上面的代码,代码遍历listTestCases,得到结果,但它不会转到success函数。 (不提醒)

我试过了:

 $.getJSON("TestInput/listTestCases/" + testCategory, null, function(data) {
            alert("here");
        });

同样的结果并不奇怪。

我甚至尝试过:(json-p)

 $.ajax({
            url: "TestInput/listTestCases/" + testCategory,
            dataType: "json-p",
            success: function(data) {
                alert(data.length);
                var S = "";
                $("#testCasesUniqueId").removeOption(/./);
                for (var i = 0; i < data.length; i++) {
                    S += data[i];
                    var val = data[i].Value;
                    var text = data[i].Text;
                    $("#testCasesUniqueId").addOption(val, text, false);
                }
                alert(S);
            }
        }
        );

,结果是一个字符串(System.collections.List [... SelectListItem]。并没有给我列表中的对象。所以我尝试使用listTestCases2,它甚至没有调用方法。< / p>

我在某处读到了我需要使用post而不是get,我甚至尝试过postJSON。没有结果。

基本上我迷失了。

3 个答案:

答案 0 :(得分:0)

确保从网络根目录引用您的ajax调用(在网址前面加上“/”)。如上所述,您将相对引用该呼叫。我建议不要在jquery / javascript中使用双引号。另外,不要混合结果类型。假设您的控制器是TestInput,请尝试:

 $.ajax({
        url: '/TestInput/listTestCases_2/' + testCategory,
        type: 'get',
        dataType: 'json',
        success: function(data) {
            alert(data.length);
            var S = '';
            $('#testCasesUniqueId').removeOption(/./);
            for (var i = 0; i < data.length; i++) {
                S += data[i];
                var val = data[i].Value;
                var text = data[i].Text;
                $('#testCasesUniqueId').addOption(val, text, false);
            }
            alert(S);
        }
    });

答案 1 :(得分:0)

尝试使用testCategory来电的data:设置传递参数$.ajax

 $.ajax({
            url: "TestInput/listTestCases",
            data: { id: testCategory },
            dataType: "json",
            success: function(data) {
                alert(data.length);
                var S = "";
                $("#testCasesUniqueId").removeOption(/./);
                for (var i = 0; i < data.length; i++) {
                    S += data[i];
                    var val = data[i].Value;
                    var text = data[i].Text;
                    $("#testCasesUniqueId").addOption(val, text, false);
                }
                alert(S);
            }
        }
        );

答案 2 :(得分:0)

在某处我读到我需要为我的目的使用“post”方法。

 $.ajax({
            url: "TestInput/listTestCases_2/" + testCategory,
            dataType: "json",
            type: 'post',
            success: function(data) {
                alert(data.length);

            }
        });

适合我。