0

我已经开始在现有项目中重写代码,并改变了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始终是 ddl in 中的第一个值Page_Load):

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);
}
4

1 回答 1

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(); 
    }   
}  
于 2012-08-31T07:56:15.503 回答