我有一个下拉列表,我需要根据另一个选择动态填充。这一切都可以解决,我必须先清除列表后在下拉列表中呈现新数据。列表清除,但无法填充从控制器返回的新数据。我试图使用.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不是我的强项,所以任何帮助都会受到赞赏。 :)
答案 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个属性的匿名对象,一个用于选项值,另一个用于显示文本。
您尚未展示该模型,但假设其中包含SelectListItem
和int 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 }},Value
,Selected
等(即Text
的属性),因此脚本需要
Group