0

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

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

这是我的代码:

控制器:

 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,并得到结果,但它没有进入成功函数。(不提醒)

我试过了:

 $.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尝试了它,它甚至没有调用该方法。

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

基本上我迷路了。

4

3 回答 3

0

确保您从 Web 根目录引用您的 ajax 调用(在 URL 前加上“/”)。如所写,您正在相对引用该调用。我建议不要在 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);
        }
    });
于 2012-10-27T00:50:48.803 回答
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);
            }
        }
        );
于 2012-10-27T03:34:31.197 回答
0

在某处我读到我需要使用“发布”方法来达到我的目的。

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

            }
        });

为我工作。

于 2012-10-30T21:17:07.247 回答