当前位置:编程学习 > C#/ASP.NET >>

向UpdatePaneel中动态添加DropDownList控件后,怎样仍实现局部刷新?

<asp:UpdatePanel runat="server" ID="ddl_list">
  <ContentTemplate>
    <asp:DropDownList ID="ddl_root" runat="server" OnSelectedIndexChanged="showChildList" AutoPostBack="true">
    </asp:DropDownList>
  </ContentTemplate>
</asp:UpdatePanel>

我在aspx文件中添加如上代码,showChildList函数如下:
    protected void showChildList(object sender, EventArgs e)
    {
        DropDownList ddl_now = (DropDownList)sender;
        string sql = "select part_id,part_name from tb_Parts where root_id='" + ddl_now.SelectedValue.ToString() + "'";
        SqlDataReader DR = means.getcom(sql);
        if (DR.HasRows)
        {
            DropDownList ddl_new = new DropDownList();
            ddl_new.SelectedIndexChanged += new System.EventHandler(this.ChildList);
            ddl_new.AutoPostBack = true;
            ListItem li = new ListItem();
            li.Value = "-1";
            li.Text = "请选择栏目...";
            li.Selected = true;
            ddl_new.Items.Add(li);
            while (DR.Read())
            {
                ListItem li2 = new ListItem();
                li2.Value = DR["part_id"].ToString();
                li2.Text = DR["part_name"].ToString();
                ddl_new.Items.Add(li2);
            }
            ddl_now.Parent.Controls.Add(ddl_new);
        }
    }
我要实现的功能是当下拉框中的选择项改变时,到数据库中查找所选项目是否有子菜单,如果有则添加一个下拉框,在其中添加所有子菜单,如此循环。但是运行之后,我选择第一个下拉框的相应项目之后,局部刷新,添加了下拉框,在第二个下拉框中选择后就直刷新页面了,第二个下拉框也没有了。不知是哪里出了问题。

还有请问 “ddl_now.Parent.Controls.Add(ddl_new);” 是实现了将新的DropDownList控件加入到<ContentTemplate>标签里吗?
--------------------编程问答-------------------- 局部刷新的地方全部加上updatePanel --------------------编程问答-------------------- 控件回发后丢失,需要重新判断第一个下拉框,如果有下级,把这个控件的初始化再运行一遍 --------------------编程问答--------------------
引用 1 楼 chenkui2008 的回复:
局部刷新的地方全部加上updatePanel


那我第二个DropDownList在事件中添加的,也要加UpadatePanel吗?不是直接添加在原有的UpadatePanel里吗? --------------------编程问答-------------------- DropDownList ddl_new = new DropDownList();
 没把这个DropDownList 放到updatePanel中去,建议在页面上先放好DropDownList并隐藏掉,选择的时候显示它要好点哦 --------------------编程问答--------------------
引用 2 楼 bossma 的回复:
控件回发后丢失,需要重新判断第一个下拉框,如果有下级,把这个控件的初始化再运行一遍


但是第二个下拉框就已经不是局部刷新了,似乎不执行showChildList()函数 --------------------编程问答-------------------- ddl_now.Parent.Controls.Add(ddl_new);

没有实现将ddl_new加到updatePanel中吗?那是加到了哪呢? --------------------编程问答-------------------- <asp:UpdatePanel runat="server" ID="ddl_list">
  <ContentTemplate>
<div>
  <asp:DropDownList ID="ddl_root" runat="server" OnSelectedIndexChanged="showChildList" AutoPostBack="true">
  </asp:DropDownList>
</div>
  </ContentTemplate>
</asp:UpdatePanel>


莫非要这样? --------------------编程问答-------------------- 动态添加的控件不会自动保存试图状态。所以每次回发后要重新查询数据创建ddl_new控件 --------------------编程问答--------------------
引用 4 楼 zjx198934 的回复:
DropDownList ddl_new = new DropDownList();
 没把这个DropDownList 放到updatePanel中去,建议在页面上先放好DropDownList并隐藏掉,选择的时候显示它要好点哦


我希望实现只要有下级菜单就一直添加下拉框 --------------------编程问答--------------------
引用 8 楼 zengbingling 的回复:
动态添加的控件不会自动保存试图状态。所以每次回发后要重新查询数据创建ddl_new控件


这样的话好像还是不能实现更改第二个列表框的选择项之后局部刷新啊 --------------------编程问答-------------------- 难道我希望实现的功能是没办法实现的? --------------------编程问答-------------------- 跟UpdatePanel没有关系,只不过是玩所谓的“无刷新/不刷新”蒙住了你自己的眼睛。你可以把 ScriptManager 控件的 EnablePartialRendering 属性设置为 false,然后让你的程序正确地处理所谓“动态添加控件”操作。完全作对了,测试通过,才应该将那个属性设置为 true。 --------------------编程问答-------------------- 当你通过第一级菜单动态生成二级菜单的时候,需要为二级菜单的数据做保存,这样当你通过二级菜单添加第三季菜单的页面还回的时候重新加载一次二级菜单才行,因为是动态加载所以每次页面还回你都要重新加载子菜单,所以我才不建议你那样做! 可以考虑用JS --------------------编程问答--------------------
用js写ajax吧,干脆别用服务端控件了 --------------------编程问答-------------------- 至于刷新某个UpdatePanel,调用它的 Update()方法就行了。 --------------------编程问答-------------------- 因为我在同意也没还有一个控件,一刷新页面李梅的东西就没有了,所以希望下拉框是局部刷新,看来我只能限制下拉框的数量,直接在页面中画好了 --------------------编程问答-------------------- 因为我在同一页面还有一个控件,一刷新页面里面的东西就没有了,所以希望下拉框是局部刷新,看来我只能限制下拉框的数量,直接在页面中画好了 --------------------编程问答--------------------
引用 13 楼 zjx198934 的回复:
当你通过第一级菜单动态生成二级菜单的时候,需要为二级菜单的数据做保存,这样当你通过二级菜单添加第三季菜单的页面还回的时候重新加载一次二级菜单才行,因为是动态加载所以每次页面还回你都要重新加载子菜单,所以我才不建议你那样做! 可以考虑用JS

这方法你试了不行? --------------------编程问答-------------------- 这个方法当改变二级菜单时时调用Page_Load()函数吗?能实现局部刷新吗?如果还是要刷新整个页面再重新加载菜单项,就没办法得到我要的效果
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,