使用.each从jsonresult填充dropdownlist

时间:2016-12-01 23:29:27

标签: javascript jquery json asp.net-mvc

我有一个下拉列表,我需要根据另一个选择动态填充。这一切都可以解决,我必须先清除列表后在下拉列表中呈现新数据。列表清除,但无法填充从控制器返回的新数据。我试图使用.each。

这是有问题的控制器方法:

{4{1'b1}}

如您所见,我正在返回List的序列化json结果。

在视图中,我有以下内容:

[AcceptVerbs(HttpVerbs.Get)]
public JsonResult UpdateDocumentSubType(string DocumentType)
{
    List<SelectListItem> DocumentSubTypeList = new List<SelectListItem>();
    PropertyModel model = new PropertyModel();
    int DocTypeID = 0;
    //get DocTypeID
    DocTypeID = model.GetDocTypeID(DocumentType);
    //gets new document subtype list
    DocumentSubTypeList = model.GetDocumentSubTypes(DocTypeID);
    //return document subtype list
    return Json(DocumentSubTypeList, JsonRequestBehavior.AllowGet);
}

这就是它们崩溃的地方。代码命中select.empty():并成功执行,但随后作为SelectListItem的“text”值,它提供了对象数组的索引元素。基本上,标签呈现如下:

$.ajax({
    url: '@Url.Action("UpdateDocumentSubType","Document")',
    type: 'GET',
    dataType: "json",
    data: { DocumentType: SelectedDocTypeText },
    async: true,
    success: function (data) {
        var select = $("#Docs_DocumentSubTypeID");
        select.empty();
        $.each(data, function (index, item) {
            select.append($('<option></option>').val(item).html(index));
        });
    }
});

我已经确认数据正在传递。当我把.each放在自己的函数中时,调用该函数,然后添加“debugger”。对此,我可以将生成的“数据”中的数据视为[object,object]的四个元素。

正如您可能已经猜到的那样,JQuery不是我的强项,所以任何帮助都会受到赞赏。 :)

2 个答案:

答案 0 :(得分:0)

我也是新手,所以这可能不正确。 试试

    $('<option></option>').val(item[index]).html(index));

    $('<option></option>').val(item[0]).html(index));

而不是你写的。

我需要更多信息。你能分享一下github回购吗?

我正在做一些非常相似的事情,这就是我所做的:

(从第85行到第96行查看渲染功能) https://github.com/stephenhu3/codepal/blob/development/js/youtubeComponent.js

它对我有用。

答案 1 :(得分:0)

首先,您不应该在void方法中返回List<SelectListItem> - 如果您从未使用它们,则无法将UpdateDocumentSubType的额外属性返回给客户端。您需要返回的只是一个包含2个属性的匿名对象,一个用于选项值,另一个用于显示文本。

您尚未展示该模型,但假设其中包含SelectListItemint ID等属性,那么它就是(比方说)

string Name

您看到var data = db.YourTable.Where(...).Select(x => new { Value = x.ID, Text = x.Name }; return Json(data, JsonRequestBehavior.AllowGet); 的原因是您返回的复杂对象数组value="[object Object]" item指的是包含属性$.each(data, function (index, item) {的对象,{{1 }},ValueSelected等(即Text的属性),因此脚本需要

Group