Jquery динамическая загрузка выпадающего списка - PullRequest
0 голосов
/ 29 августа 2011

У меня проблема с выпадающим списком динамической загрузки.Я отладил свой Ashx, он публикует данные.Но выпадающий список не имеет значения.

Вот моя страница Aspx

<script type="text/javascript"> 
$(function() {
            $.post("ContentLoad.ashx", function(datas) {
            for(var i = 0; i < datas.length; i++) {
                    var data = datas[i];
                    var option = $("<option value='"+data.Id  + "'>" +data.Title + "</option");
                    $("#ddlClassId").append(option);
                }
            },"json");
        });
</script>

В html есть выпадающий список.

<asp:DropDownList ID="ddlClassId" runat="server" AutoPostBack="True">
                    </asp:DropDownList>

А вот мой код Ashx:

public class ContentLoad : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            BLL.ChannelManeger bll = new BLL.ChannelManeger();
            DataTable dt = bll.GetList(0, 0);
            Data[] datas = new Data[dt.Rows.Count];

            int i = 0;
            foreach (DataRow dr in dt.Rows)
            {
                string id = dr["Id"].ToString();
                int ClassLayer = int.Parse(dr["ClassLayer"].ToString());
                string title = dr["Title"].ToString().Trim();
                if (ClassLayer == 1)
                {
                    datas[i++] = new Data() { Id = Convert.ToInt32(id), Title = title };
                }
                else
                {
                    title = "├ " + title;
                    title = StringOfChar(ClassLayer - 1, " ") + title;
                    datas[i++] = new Data() { Id = Convert.ToInt32(id), Title = title };
                }
            }
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            context.Response.Write(serializer.Serialize(datas));
        }

        public static string StringOfChar(int strLong, string str)
        {
            string ReturnStr = "";
            for (int i = 0; i < strLong; i++)
            {
                ReturnStr += str;
            }

            return ReturnStr;
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

    class Data
    {
        public int Id { get; set; }
        public string Title { get; set; }
    }

Ответы [ 2 ]

1 голос
/ 29 августа 2011

В вашем коде была опечатка внутри цикла for, а также из-за того, что выпадающий список является серверным элементом управления, его идентификатор может измениться, поэтому вам не следует использовать селектор id, если вы не используете ClientID элемента управления. Я упростил ваш код, используя цикл $.each.

   $(function() {
       $.post("ContentLoad.ashx", function(datas) {
           var $ddl = $("select[id*=ddlClassId]");
           $.each(datas, function(){
             $ddl.append("<option value='"+this.Id  + "'>" +this.Title + "</option");
           });
        },"json");
    });
1 голос
/ 29 августа 2011

посмотрите на эту строку: var data = data[i]; это должно быть var data = datas[i];

...