C# 用JsonData填充DropDownList

C# 用JsonData填充DropDownList,c#,asp.net,json,asp.net-mvc-4,C#,Asp.net,Json,Asp.net Mvc 4,我以前从未使用过Json,这是我第一次使用Json,正如预期的那样,我在想用JsonData填充下拉列表时遇到了问题。 这里我要做的是我有一个Xml,我正在用Json转换它,比如: string xml = "<Root><Name>A</Name><Name>B</Name><Name>C</Name></Root>"; 当前我的视图类似于: <div> <inp

我以前从未使用过Json,这是我第一次使用Json,正如预期的那样,我在想用JsonData填充下拉列表时遇到了问题。 这里我要做的是我有一个Xml,我正在用Json转换它,比如:

string xml = "<Root><Name>A</Name><Name>B</Name><Name>C</Name></Root>";
当前我的视图类似于:

<div>
        <input type="button" value="work" name="work" id="idwork" />
    </div>
    @Html.DropDownListFor(x => x.Name, new SelectList(Enumerable.Empty<SelectListItem>()), new {id="ddl_items" })

@DropDownListFor(x=>x.Name,新的SelectList(Enumerable.Empty()),新的{id=“ddl_items”})
脚本

XmlDocument doc = new XmlDocument();
            doc.LoadXml(Xml);
            string jsonText = JsonConvert.SerializeXmlNode(doc);
var ddl = $('#ddl_items');
    $('#idwork').on('click', function () {
                $.ajax({
                    url: url,
                    data: {},
                    type: 'post',
                    contentType: 'application/json; charset=utf-8',
                    success: function (myJSONdata) {
  $(myJSONdata.Name).each(function () {
                        ddl.append(
                            $('<option/>', {
                                value: this.ReworkTunnelName
                            }).html(this.Nome)
    ..
    ..
    });
var-ddl=$(“#ddl_项”);
$('#idwork')。在('click',函数(){
$.ajax({
url:url,
数据:{},
键入:“post”,
contentType:'application/json;charset=utf-8',
成功:函数(myJSONdata){
$(myJSONdata.Name){
ddl.append(
$('', {
值:this.ReworkTunnelName
}).html(this.Nome)
..
..
});
现在我要做的是在这个JsonData的帮助下,用名称填充下拉列表。
请帮助

您可以创建一个新的javascript函数,并将下拉id和json数据作为参数传递给它

然后可以根据数据结构解析json数据。进一步运行循环并在select元素中添加项。

$。每个(myJSONdata,function()
$.each(myJSONdata, function ()
 {
  ddl.append($("<option></option>").attr("value", this.ReworkTunnelName).text(this.Nome));
 });
{ addl.append($(“”).attr(“value”,this.ReworkTunnelName).text(this.Nome)); });
编辑

$。每个(myJSONdata,函数()
{
addl.append($(“”).attr(“value”,this.ReworkTunnelName).attr(“text”,this.Nome));
});
$.each(myJSONdata.Root,函数()
{
ddl.append($(“”).attr(“text”,this.ReworkTunnelName));
});

您可以在jQuery中使用
getJSON
方法:

$.getJSON("ActionMethodName", "", function (data) {
                $(data).each(function () {
                    $("<option>").val(this.ReworkTunnelName)
                                 .text(this.Nome)
                                 .appendTo("#ddl_items");
                });
});
$.getJSON(“ActionMethodName”,函数(数据){
$(数据)。每个(函数(){
$(“”).val(此.ReworkTunnelName)
.text(此.Nome)
.附于(“#ddl_项目”);
});
});
HTML:

<select id="ddl_items">
    <option></option>
</select>

试试这个

$.each(myJSONdata, function (index, item) {  
   $('#ddl_items').get(0).options[$('#ddl_items').get(0).options.length] = new Option(item.Text, item.Value);
});

我最终做了这件事,效果很好

$('#idRework').on('click', function () {
            $.ajax({
                url: url,
                data: {},
                type: 'post',
                contentType: 'application/json; charset=utf-8',
                success: function (myJSONdata) {
                    var obj = jQuery.parseJSON(myJSONdata);                   
                    $.each(obj.Root.ReworkTunnelName, function (index, itemData) {
                        ddl.append($('<option></option>').val(itemData).html(itemData));

                    });

                }
            });
        });
$('idwork')。在('click',函数(){
$.ajax({
url:url,
数据:{},
键入:“post”,
contentType:'application/json;charset=utf-8',
成功:函数(myJSONdata){
var obj=jQuery.parseJSON(myJSONdata);
$.each(obj.Root.ReworkTunnelName,函数(索引,itemData){
append($('').val(itemData.html(itemData));
});
}
});
});

如果你能发布一个这样做的代码,那会更有帮助。我正要写代码。但我看到了“Rex”的答案,它正在解决问题。所以保持原样。这是给Uncaughtexception on.text(This.Nome));说对象没有方法text@Farzi我还添加了另一个选项,我已经在使用第一个选项,它在mvc下拉列表中运行良好text@Farzi您需要调试并查看下拉列表是否支持文本属性。通常应该是。我得到的Jsondata是以下形式:“{”Root“:{”ReworkTunnelName:[“A”,“B”,“C”]}”我想在下拉列表中显示一个B C是的..在“$('.#ddl_items')”附近有一个额外的“)”。现在删除..检查更新的答案
$('#idRework').on('click', function () {
            $.ajax({
                url: url,
                data: {},
                type: 'post',
                contentType: 'application/json; charset=utf-8',
                success: function (myJSONdata) {
                    var obj = jQuery.parseJSON(myJSONdata);                   
                    $.each(obj.Root.ReworkTunnelName, function (index, itemData) {
                        ddl.append($('<option></option>').val(itemData).html(itemData));

                    });

                }
            });
        });