none
关于多个DropDownList设置SelectedValue和Items.FindByValue().Checked属性的问题 RRS feed

  • 问题

  • 从一个页面点击链接 /ajax.aspx?id=123456 跳转到页面,然后更具ID读取数据库,更具数据库的信息绑定DropDownList的值,但是不知道为什么,绑定了一个有其他的DropDownList的值也会跟着改变

    自己把关键代码提取出来做了个例子。代码如下。

    问题详细描述:在页面第一次加载的时候初始化下拉列表的值,值已存在Application中,例子中有三个DropDownList,两个初始化后的值一样,后一个是另一种值。进入页面显示正常,三个下拉均选择的是“请选择”项,点击 HyperLink 跳转后, 前两个 下拉列表的值 都变成“中学”了,请问是怎么回事?
    谢谢!


    Application["education"]
    {
        "value=-;text=请选择"
        "value=1;text=小学"
        "value=2;text=中学"
        "value=3;text=大学"
    }

    Application["marry"]
    {
        "value=-;text=请选择"
        "value=1;text=未婚"
        "value=2;text=离异"
        "value=3;text=丧偶"
    }

    ajax.aspx页面

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ajax.aspx.cs" Inherits="ajax" %>
    
    <!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 id="Head1" runat="server">
        <title>test</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:DropDownList ID="ddl_edu" runat="server" Height="50px">
        </asp:DropDownList>
        
        <asp:DropDownList ID="ddl_ta_edu" runat="server" Height="50px">
        </asp:DropDownList>    
        
    






    <asp:DropDownList ID="ddl_marry" runat="server" Height="50px"> </asp:DropDownList>

    <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/ajax.aspx?id=123456">HyperLink</asp:HyperLink> </form> </body> </html>





    ajax.aspx页面代码

    public partial class ajax : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                ddl_edu.Items.AddRange((ListItem[])Application["education"]);
                ddl_ta_edu.Items.AddRange((ListItem[])Application["education"]);
                ddl_marry.Items.AddRange((ListItem[])Application["marry"]);
            }
            if (Request.QueryString["id"] != null && Request.QueryString["id"].Length != 0)
            {
                ddl_edu.SelectedValue = "2";
            }
        }
    }
    

    富磊
    2009年12月3日 4:38

答案

  • 你好!

    这个似乎你共用了 ListItem 你改每次创建新的 ListItem 能解决这个问题。

    protected void Page_Load(object sender, EventArgs e)
    {
        //if (Application["education"] == null)
        //{
        //    Application["education"] = new ListItem[] { 
        //        new ListItem("请选择", "-"),
        //        new ListItem("小学", "1"),
        //        new ListItem("中学", "2"),
        //        new ListItem("大学", "3"),
        //    };
        //}
    
        //if (Application["marry"] == null)
        //{
        //    Application["marry"] = new ListItem[] { 
        //        new ListItem("请选择", "-"),
        //        new ListItem("未婚", "1"),
        //        new ListItem("离异", "2"),
        //        new ListItem("丧偶", "3"),
        //    };
        //}
        
        if (!Page.IsPostBack)
        {
            //ddl_edu.Items.AddRange((ListItem[])Application["education"]);
            //ddl_ta_edu.Items.AddRange((ListItem[])Application["education"]);
            //ddl_marry.Items.AddRange((ListItem[])Application["education"]);
            this.BindItems(ddl_edu);
            this.BindItems(ddl_ta_edu);
            this.BindItems(ddl_marry);
        }
    
        if (Request.QueryString["id"] != null && Request.QueryString["id"].Length != 0)
        {
            ddl_edu.SelectedValue = "2";
        }
    }
    
    private void BindItems(DropDownList c)
    {
        c.Items.AddRange(new ListItem[] { 
                new ListItem("请选择", "-"),
                new ListItem("小学", "1"),
                new ListItem("中学", "2"),
                new ListItem("大学", "3"),
            });
    }


    知识改变命运,奋斗成就人生!
    • 已标记为答案 富磊 2009年12月3日 7:53
    2009年12月3日 5:41
    版主