DropDownList populate方法会影响回发行为吗?

时间:2012-08-31 07:03:33

标签: c# asp.net

我已经开始在现有项目中重写代码,并改变了填充两个dropdownlists的方式。使用DataBind时,SelectedValue在回发后的Page_Load中具有正确的值。但是在使用AddRange时,SelectedValue始终是下拉列表中的第一个值。

下拉列表的填充方式如何影响回发行为?是的,页面中也有java脚本,但我看不出他们如何干扰这个。

工作方式(SelectedValue中的Page_Load是正确的):

protected void Page_Init(object sender, EventArgs e)
{
    IList<ListItem> list = new List<ListItem>();
    list.Add(new ListItem(Resources.Site.OriginalStructure, "0"));
    list.Add(new ListItem("5", "5"));
    list.Add(new ListItem("10", "10"));
    list.Add(new ListItem("15", "15"));
    list.Add(new ListItem("20", "20"));
    list.Add(new ListItem("25", "25"));

    DropDownList1.DataSource = list;
    DropDownList1.DataTextField = "Text";
    DropDownList1.DataValueField = "Value";
    DropDownList1.DataBind();

    DropDownList2.DataSource = list;
    DropDownList2.DataTextField = "Text";
    DropDownList2.DataValueField = "Value";
    DropDownList2.DataBind();   
}

不起作用的方式(SelectedValue始终是Page_Load中ddl中的第一个值):

protected void Page_Init(object sender, EventArgs e)
{
    var numberQuestionsPerPageDdlValues = new[]
    {
        new ListItem(Resources.Site.OriginalStructure, "0"),
        new ListItem("5", "5"),
        new ListItem("10", "10"),
        new ListItem("15", "15"),
        new ListItem("20", "20"),
        new ListItem("25", "25")
    };
    DropDownList1.Items.AddRange(numberQuestionsPerPageDdlValues);
    DropDownList2.Items.AddRange(numberQuestionsPerPageDdlValues);
}

1 个答案:

答案 0 :(得分:1)

  

“正确的SelectedValue”是指由...选择的值   用户在页面上

您在每次回发时都将DropDownList绑定到它的DataSource。你应该只做if(!Page.IsPostBack)。否则,将不会触发事件,并且将覆盖用户的SelectedValue

我还建议改为使用page_load

protected void Page_Load(object sender, EventArgs e)
{
    if(!Page.IsPostBack)
    {
        IList<ListItem> list = new List<ListItem>();
        list.Add(new ListItem(Resources.Site.OriginalStructure, "0"));
        list.Add(new ListItem("5", "5"));
        list.Add(new ListItem("10", "10"));
        list.Add(new ListItem("15", "15"));
        list.Add(new ListItem("20", "20"));
        list.Add(new ListItem("25", "25"));

        DropDownList1.DataSource = list;
        DropDownList1.DataTextField = "Text";
        DropDownList1.DataValueField = "Value";
        DropDownList1.DataBind();

        DropDownList2.DataSource = list;
        DropDownList2.DataTextField = "Text";
        DropDownList2.DataValueField = "Value";
        DropDownList2.DataBind(); 
    }   
}