这个动态下拉列表有什么问题?

时间:2014-05-22 10:07:22

标签: jquery asp.net-mvc linq

我是ASP.Net MVC和Linq的新手。我一直在关注如何填写下拉列表,从另一个ddl中选择一个值。

我从数据库获取数据并成功过滤但这些结果没有绑定或显示在ddl中。

我必须做一些基本的错误,但因为我的生活无法看到它是什么。以下是我到目前为止的情况。非常感谢。

我的第一个下拉列表是使用html帮助器正确填充 - 这是我在原始html中的第二个ddl

<select id="projectcode"></select>

同一视图的脚本部分中的Jquery

<script language="javascript" type="text/javascript">
    $(function () {
        $("#@Html.IdFor(model => model.CustomerCode)").change(function () {
            $.getJSON("/IssueView/GetIssueList", { code: $("#@Html.IdFor(model => model.CustomerCode)").val() },
                function (results) {
                    $("#projectcode").empty();
                    $.each(results, function (i, proj) {
                        $("#projectcode").append("" + proj.ProjectCode + "");
                    });
                });
        });
    });
</script>

控制器操作

public ActionResult GetIssueList(string code)
{
    //dynamic fill of project code dropdown on selection of customer code drop down
    ProjectManager pm = new ProjectManager();

    var projectcodes = pm.SelectAllProjects();
    var test = projectcodes.Where(x => x.CustomerCode == code).ToList();
    return Json(test);
}

ProjectManager代码

public List<Project> SelectAllProjects()
{
    using (IssueViewContext context = new IssueViewContext())
    {
        return context.Projects.ToList();
    }
}

我在包含过滤数据的操作中调试了变量test。这证明了从jquery脚本调用的操作。但是ddl没有填充这些数据 - 它是空的。

我也是堆叠溢出的新手,所以我希望我已经提供了所需的全部内容。感谢您的阅读

修改

我在没有调用的json返回后发出警告,因此它没有通过json调用。

然后我将脚本更改为

<script language="javascript" type="text/javascript">
    $(document).ready(function () {
        $("#projectcode").prop("disabled", true);
        $("#@Html.IdFor(model => model.CustomerCode)").change(function () {
            if ($("#@Html.IdFor(model => model.CustomerCode)").val() != "Please select") {
                var options = {};
                options.url = "/IssueView/GetIssueList";
                options.type = "POST";
                options.data = JSON.stringify({ code: $("#@Html.IdFor(model => model.CustomerCode)").val() });
                options.dataType = "json";
                options.contentType = "application/json";
                options.success = function (results) {
                    alert(results);
                    $("#projectcode").empty();                    
                    for (var i = 0; i < results.length; i++) {
                        //var proj = (string).results[i].val;
                        $("#projectcode").append("<option>" + results[i] + "</option>");
                    }
                    $("#projectcode").prop("disabled", false);
                };
                options.error = function () { alert("Error retrieving codes!"); };
                $.ajax(options);
            }
            else {
                $("#projectcode").empty();
                $("#projectcode").prop("disabled", true);
            }
        });
    });
    </script>

我现在在ddl中获取对象[object Object]。所以更进一步,但在搜索之后,我没有更接近理解如何解析对象?

2 个答案:

答案 0 :(得分:0)

此:

$("#projectcode").append("" + proj.ProjectCode + "");

必须是这样的:

$("#projectcode").append("<option>" + proj.ProjectCode + "</option>");

答案 1 :(得分:0)

使用kendoDropDownList,如下所示:

<input id="ddlTest" value="0" />        

$.getJSON(URL)
                .done(function (results) {                   
                    $("#ddlTest").kendoDropDownList({
                        dataTextField: "Name",
                        dataValueField: "UserID",
                        dataSource: results ,
                        optionLabel: " ",
                        index: 0
                    });             
              );
             }