ajax填充下列列表,感觉控件状态好像没有保存,每次页面回传,先要执行js,获取列表后填充到dropdownList,这样就会出下这样的问题:页面第一次加载,下拉列表中都还有选项存在,但中间如果有其它动作,页面回传,那么先在服务器端执行,然后发送到客户端,但这个列表又是空的,因为JS还没有执行,没有到服务器端读取列表,然这个动作需要知道下拉列表是选中的哪一项?所以在服务器端执行时总时报错,说下拉列表项为空,这个问题怎么解决啊明天要交东西,搞了半天,不知道怎么解决,在线急等!

解决方案 »

  1.   

    我是在body 的onload事件是填充下拉列表,换成
    在page_loaded事件中调用
            Page.RegisterStartupScript("fill", "<script>fill()</script>");也不行,
      

  2.   

    将下拉框的ViewSate状态设为false,在试试
      

  3.   

    中间如果有其它动作,页面回传,那么先在服务器端执行,然后发送到客户端,但这个列表又是空的,因为JS还没有执行,没有到服务器端读取列表1:你让它执行JS
    2:页面回传时不要让它刷新下拉列表
      

  4.   


    试过了,不可以,找一下,用Request.Form[ddlID].ToString()方法可以获取,
    但是新问题又出现了,每次选中的项不能保存,都恢复到页面第一次加时的情形,用什么方法能保存控件状态呢
     有一种搞法说用HiddenField控件,但不知道怎么用,还没有用过这个玩意儿
      

  5.   

    http://topic.csdn.net/u/20070428/20/534c4d2b-da80-4f29-934f-c7ecfbb1816a.html
      

  6.   

    如果你在JS控制,那回刷之后,dropdownlist肯定会变成刚加载页面时的状态.
      

  7.   

    问题怎么解决。
     js 要是有ispostback属性就好了
      

  8.   

    问题还是没有解决,ajax不可以不适用于有回传的这种类型,要在后台再重新处理吧
      

  9.   

    不再后台Request.From["ID"]不可以取到值么
      

  10.   


    20天之后“问题还是没有解决”,让人怀疑你说的ajax到是个什么东西?
      

  11.   

    你可以在你的vs下创建一个ajax enabled网站,然后创建一个aspx然后把下面的代码中覆盖上去测试:<%@ Page Language="C#" %><script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
                this.TextBox1.DataBind();
        }    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.DropDownList2.Items.Clear();
            switch (this.DropDownList1.SelectedValue)
            {
                case "北京":
                    this.DropDownList2.Items.Add("天安门广场");
                    this.DropDownList2.Items.Add("颐和园");
                    this.DropDownList2.Items.Add("雍和宫");
                    this.DropDownList2.Items.Add("红螺寺");
                    break;
                case "上海":
                    this.DropDownList2.Items.Add("崇明岛");
                    this.DropDownList2.Items.Add("外滩");
                    this.DropDownList2.Items.Add("万佛阁");
                    break;
                case "香港":
                    this.DropDownList2.Items.Add("海洋公园");
                    this.DropDownList2.Items.Add("半岛酒店");
                    break;
            }
        }
        protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
        {
            ShowResult();
        }    protected void Button1_Click(object sender, EventArgs e)
        {
            try
            {
                this.Calendar1.SelectedDate = DateTime.Parse(this.TextBox1.Text);
            }
            catch
            {
            }
            this.Calendar1.Visible = true;
        }    protected void Calendar1_SelectionChanged(object sender, EventArgs e)
        {
            this.TextBox1.Text = this.Calendar1.SelectedDate.ToShortDateString();
            this.Calendar1.Visible = false;
            ShowResult();
        }    void ShowResult()
        {
            this.Label1.Text = "您选择" + this.TextBox1.Text + "去" + this.DropDownList2.SelectedValue;
            UpdatePanel3.Update();
        }
    </script><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>演示asp.net ajax最基本功能</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
                    <asp:ListItem></asp:ListItem>
                    <asp:ListItem>北京</asp:ListItem>
                    <asp:ListItem>上海</asp:ListItem>
                    <asp:ListItem>香港</asp:ListItem>
                </asp:DropDownList>
                <asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged" />
            </ContentTemplate>
        </asp:UpdatePanel>
        <br />
        <table border="0" cellpadding="0" cellspacing="0">
            <tr>
                <td>
                    请输入日期:
                </td>
                <td>
                    <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
                        <ContentTemplate>
                            <table cellpadding="0" cellspacing="0">
                                <tr>
                                    <td>
                                        <asp:TextBox ID="TextBox1" runat="server" Width="147px" Text="<%# DateTime.Now.AddDays(20).ToShortDateString() %>" />
                                        <asp:Button ID="Button1" runat="server" Text="..." OnClick="Button1_Click" />
                                    </td>
                                </tr>
                                <tr>
                                    <td>
                                        <asp:Calendar ID="Calendar1" runat="server" Visible="False" Style="position: absolute"
                                            OnSelectionChanged="Calendar1_SelectionChanged" BackColor="#FFFFCC" BorderColor="#FFCC66"
                                            BorderWidth="1px" DayNameFormat="Shortest" Font-Names="Verdana" Font-Size="8pt"
                                            ForeColor="#663399" Height="200px" ShowGridLines="True" Width="220px">
                                            <SelectedDayStyle BackColor="#CCCCFF" Font-Bold="True" />
                                            <SelectorStyle BackColor="#FFCC66" />
                                            <TodayDayStyle BackColor="#FFCC66" ForeColor="White" />
                                            <OtherMonthDayStyle ForeColor="#CC9966" />
                                            <NextPrevStyle Font-Size="9pt" ForeColor="#FFFFCC" />
                                            <DayHeaderStyle BackColor="#FFCC66" Font-Bold="True" Height="1px" />
                                            <TitleStyle BackColor="#990000" Font-Bold="True" Font-Size="9pt" ForeColor="#FFFFCC" />
                                        </asp:Calendar>
                                    </td>
                                </tr>
                            </table>
                        </ContentTemplate>
                    </asp:UpdatePanel>
                </td>
            </tr>
        </table>
        <hr />
        <asp:UpdatePanel ID="UpdatePanel3" runat="server" UpdateMode="Conditional">
            <ContentTemplate>
                result:
                <asp:Label ID="Label1" runat="server" EnableViewState="False" Font-Size="Small"></asp:Label>
            </ContentTemplate>
        </asp:UpdatePanel>
        </form>
    </body>
    </html>
    你看其中没有一行javascript代码。如果你认为实现ajax就要至少写一行javascript来写,那么你一定没有选对一个asp.net ajax入门资料。
      

  12.   

    楼上教训的对,谢谢~~~~~~~其实我的问题就是我不想用updatepannel每次回传服务器,页面数据量本身就比较大,每回传一次,虽然说页面没有刷新,但是给人的感觉就像是页面死了一样!不动了所以~~~~~~~~~~呵呵~~~~
      

  13.   

    我的意思是我不想用UpdatePannel~~~
      

  14.   

    ajaxpro吧,,或用ajax的类,,自己写代码,,
      

  15.   

    都这么久了lz还没有解决问题,汗,建议把代码贴出来别人更容易理解些!!
    其实以前也遇到这种问题,说到底是因为js不能保存视图状态,可以想法把下拉列表的值保存起来,以便再次再取;
    一般的解决办法是用一个隐含字段来保存下拉列表上次选中的值,一个例子:<html>
    <head></head>
    <script language=javascript>
    window.onload = function(){
     document.getElementById("sel").attachEvent("onchange",save());
    }
    function save()
    {
       document.getElementById("hidsel").value=document.getElementById("sel").options[document.getElementById("sel").selectIndex].value;//只是每次把选择的值放到hidsel里面,要取的话取这个值就行了;}
    </script>
    <body>
    <input type=hidden id=hidsel name=hidsel runtat=server>(注意加上runtat=server,回发以后不会丢)
    <select id=sel name=sel>
    <option value=0>0</option>
    ...
    </select>
    </body>
    </html
      

  16.   

    随手写的代码,写错了一个地方,改正下:function save()
    {
       document.getElementById("hidsel").value=document.getElementById("sel").options[document.getElementById("sel").selectedIndex].value;//只是每次把选择的值放到hidsel里面,要取的话取这个值就行了;}
      

  17.   

    后台每次取hidsel.Value的值就可以了,不知道我说的是不是lz要解决的问题^_^
      

  18.   

    哈哈,你可以在dropdownList控件上加一个onclick事件
    方法按19楼就行了,就可以在CS类中取到选中的值,后面该做什么方法就做什么方法
      

  19.   

    .NET联盟会馆 QQ群号:77329563  招聘中.....