【问题标题】:How to fill a DropDown using Jquery Ajax Call?如何使用 Jquery Ajax Call 填充 DropDown?
【发布时间】:2014-04-09 07:37:44
【问题描述】:

我有一个 WebMethod,它获取要在 DataSet 中填充 DropDown 的数据。 目前我正在使用硬编码对象填充下拉列表。但我想用 webmethod 返回的数据替换这个硬编码对象。

 [System.Web.Services.WebMethod]
         public static string GetDropDownDataWM(string name)
         {
             //return "Hello " + name + Environment.NewLine + "The Current Time is: "
             //    + DateTime.Now.ToString();

             var msg = "arbaaz";

             string[] name1 = new string[1];
             string[] Value = new string[1];
             name1[0] = "@Empcode";
             Value[0] = HttpContext.Current.Session["LoginUser"].ToString().Trim();
             DataSet ds = new DataSet();
             dboperation dbo = new dboperation();
             ds = dbo.executeProcedure("GetDropDownsForVendor", name1, Value, 1);

             return ds.GetXml(); 

         }

客户端(更新 1):

  <script type = "text/javascript">
    function GetDropDownData() {
        var myDropDownList = $('.myDropDownLisTId');

        $.ajax({
            type: "POST",
            url: "test.aspx/GetDropDownDataWM",
            data: '{name: "abc" }',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                $.each(jQuery.parseJSON(data.d), function () {
                    myDropDownList.append($("<option></option>").val(this['FieldDescription']).html(this['FieldCode']));
                });
            },
            failure: function (response) {
                alert(response.d);
            }
        });
    }
    function OnSuccess(response) {
        console.log(response.d);
        alert(response.d);
    }
</script>

【问题讨论】:

  • 你的回复是什么样的?
  • @Arbaaz,您编辑的代码(在您的 Q 中)是否有效?

标签: c# javascript jquery asp.net ajax


【解决方案1】:
function GetDropDownData() {
    $.ajax({
        type: "POST",
        url: "test.aspx/GetDropDownDataWM",
        data: '{name: "abc" }',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(data.d)
                {
                    $.each(data.d, function (){
                        $(".myDropDownLisTId").append($("<option     />").val(this.KeyName).text(this.ValueName));
                    });
                },
        failure: function () {
            alert("Failed!");
        }
    });
}

【讨论】:

    【解决方案2】:
     var theDropDown = document.getElementById("myDropDownLisTId");
                    theDropDown.length = 0;
                    $.each(items, function (key, value) {
    
                        $("#myDropDownLisTId").append($("<option></option>").val(value.PKId).html(value.SubDesc));
    

    这里的“SubDesc”,PKId 描述了从数据库中取出的值。你需要将你的值与数据集分开。

    【讨论】:

      【解决方案3】:

      来自WebMethod,不要直接发DataSet,发XML...

      [System.Web.Services.WebMethod]
      public static string GetDropDownDataWM(string name)
      {
          DataSet ds = new DataSet();
          ds.Tables.Add("Table0");
          ds.Tables[0].Columns.Add("OptionValue");
          ds.Tables[0].Columns.Add("OptionText");
          ds.Tables[0].Rows.Add("0", "test 0");
          ds.Tables[0].Rows.Add("1", "test 1");
          ds.Tables[0].Rows.Add("2", "test 2");
          ds.Tables[0].Rows.Add("3", "test 3");
          ds.Tables[0].Rows.Add("4", "test 4");
      
          return ds.GetXml();
      }
      

      Ajax 调用之前...

      var myDropDownList = $('.myDropDownLisTId');
      

      尝试如下...(在 Ajax 调用中)

      success: function (response) {
          debugger;
      
          $(response.d).find('Table0').each(function () {
                 var OptionValue = $(this).find('OptionValue').text();
                 var OptionText = $(this).find('OptionText').text();
                 var option = $("<option>" + OptionText + "</option>");
                 option.attr("value", OptionValue);
      
                 myDropDownList.append(option);
           });
      },
      

      注意:

      1. OptionValueOptionTextDataSet 表的列。

      2. $(response.d).find('Table0').each(function (){}) - 这里是Table0DataSet里面的Table的名字。

      【讨论】:

      • 但是我在哪里调用 GetDropDownData()?在filldd() 对吗?
      • @Arbaaz 是的,在那个 filldd() 函数中。
      • 加载资源失败:服务器响应状态为500(Internal Server Error
      • 看看他的小提琴..jsfiddle.net/a4NSm/5我想用服务器返回的数据而不是硬编码的对象来填充下拉列表。
      • 500 Errors 表示 URL 错误。您确定网址test.aspx/GetDropDownDataWM 正确吗?
      【解决方案4】:
      [System.Web.Services.WebMethod]
           public static string GetDropDownDataWM(string name)
           {
               //return "Hello " + name + Environment.NewLine + "The Current Time is: "
               //    + DateTime.Now.ToString();
      
               var msg = "arbaaz";
      
               string[] name1 = new string[1];
               string[] Value = new string[1];
               name1[0] = "@Empcode";
               Value[0] = HttpContext.Current.Session["LoginUser"].ToString().Trim();
               DataSet ds = new DataSet();
               dboperation dbo = new dboperation();
               ds = dbo.executeProcedure("GetDropDownsForVendor", name1, Value, 1);
      
               return DataSetToJSON(ds); 
      
           }
      
      public static string DataSetToJSON(DataSet ds)
      {
      
          Dictionary<string, object> dict = new Dictionary<string, object>();
          foreach (DataTable dt in ds.Tables)
          {
              object[] arr = new object[dt.Rows.Count + 1];
      
              for (int i = 0; i <= dt.Rows.Count - 1; i++)
              {
                  arr[i] = dt.Rows[i].ItemArray;
              }
      
              dict.Add(dt.TableName, arr);
          }
      
          var lstJson = Newtonsoft.Json.JsonConvert.SerializeObject(dict);
          return lstJson;
      }
      

      Ajax 调用

      function GetAssociation() {
      
              var myDropDownList = $("#myDropDownLisTId");
              var post_data = JSON.stringify({ "name": "xyz"});
              $.ajax({
                  type: "POST",
                  url: "test.aspx/GetDropDownDataWM",
                  data: post_data,
                  contentType: "application/json; charset=utf-8",
                  dataType: "json",
                  success: function (response) {
                      json_data = JSON.parse(response.d);
                      myDropDownList.empty();
                      for(i=0; i<json_data.Table.length; i++)
                      {
      
                          myDropDownList.append($("<option></option>").val(json_data.Table[i][0]).html(json_data.Table[i][1]));
                      }
      
                  },
                  failure: function (response) {
                      alert(response.d);
                  }
              });
          }
      

      【讨论】:

        【解决方案5】:
        // We can bind dropdown list using this Jquery function in JS script
           
        
        function listDropdownBind() {
          var requestId = 123; 
            $.ajax({
                type: "POST",
                url: "/api/ControllerName/ActionName?param=" + param, // call API with parameter
                headers: { 'rId': requestId },
                dataType: "json",
                contentType: "application/json; charset=utf-8",
        
                success: function (data) {
                    var optionhtml1 = '';
                    var optionhtml1 = '<option value="' +
                        0 + '">' + "--Select--" + '</option>';
                    $("#ddlName").append(optionhtml1);
        
                    $.each(data, function (i) {
        
                        var optionhtml = '<option value="' +
                            data.d[i].Value + '">' + data.d[i].Text + '</option>';
                        $("#ddlName").append(optionhtml);
                    });
                }
            });
        };
        

        【讨论】:

        • 一个好的答案将始终包括解释为什么这会解决问题,以便 OP 和任何未来的读者可以从中学习。
        猜你喜欢
        • 1970-01-01
        • 2013-06-10
        • 1970-01-01
        • 1970-01-01
        • 2010-12-16
        • 1970-01-01
        • 2018-09-09
        • 1970-01-01
        • 2011-07-23
        相关资源
        最近更新 更多