【问题标题】:Fill DropDownList with JsonData用 JsonData 填充 DropDownList
【发布时间】:2013-10-28 12:01:52
【问题描述】:

我以前没有在 Json 上工作过,这是我的第一次,正如预期的那样,我卡在了我想用 JsonData 填充 DropDown 的地方。 在这里,我正在做的是我有一个 Xml,我在 Json 中转换它:

string xml = "<Root><Name>A</Name><Name>B</Name><Name>C</Name></Root>";

然后这样做将其转换为 JsonString

XmlDocument doc = new XmlDocument();
            doc.LoadXml(Xml);
            string jsonText = JsonConvert.SerializeXmlNode(doc);

目前我的视图是这样的:

<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" })

脚本

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)
    ..
    ..
    });

现在我想做的是在这个 JsonData 的帮助下用名称填充下拉列表。 请帮忙

【问题讨论】:

    标签: c# asp.net json asp.net-mvc-4


    【解决方案1】:
    $.each(myJSONdata, function ()
     {
      ddl.append($("<option></option>").attr("value", this.ReworkTunnelName).text(this.Nome));
     });
    

    编辑

    $.each(myJSONdata, function ()
     {
      ddl.append($("<option></option>").attr("value", this.ReworkTunnelName).attr("text",this.Nome));
     });
    
    $.each(myJSONdata.Root, function ()
     {
      ddl.append($("<option></option>").attr("text", this.ReworkTunnelName));
     });
    

    【讨论】:

    • 这是在 .text(this.Nome));说对象没有方法文本
    • @Farzi 我也添加了另一个选项,我已经在使用第一个选项,并且它与 mvc 下拉列表配合得很好。
    • 与文本情况相同的异常
    • @Farzi 您需要调试并查看您的下拉菜单是否支持文本属性。一般来说应该是这样的。
    • 我得到的 Jsondata 是这种形式:"{"Root":{"ReworkTunnelName":["A","B","C"]}}" 我想显示下拉菜单中的 ABC
    【解决方案2】:

    您可以创建一个新的 javascript 函数,并在其中传递下拉 id 和 json 数据作为参数。

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

    【讨论】:

    • 如果你能发布一个这样做的代码会更有帮助。
    • 我正要写代码。但我看到了“雷克斯”的答案,它正在解决问题。所以保持原样。
    【解决方案3】:

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

    $.getJSON("ActionMethodName", "", function (data) {
                    $(data).each(function () {
                        $("<option>").val(this.ReworkTunnelName)
                                     .text(this.Nome)
                                     .appendTo("#ddl_items");
                    });
    });
    

    HTML:

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

    【讨论】:

      【解决方案4】:

      我最终这样做了,而且效果很好..

      $('#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));
      
                          });
      
                      }
                  });
              });
      

      【讨论】:

        【解决方案5】:

        试试这个

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

        【讨论】:

        • 是的.. "$('#ddl_items')" 附近有一个额外的 ")"。现在删除..检查更新的答案
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-27
        • 1970-01-01
        • 2023-03-19
        相关资源
        最近更新 更多