0

私は既存のプロジェクトのコードを書き直し始め、2 つのプロジェクトの作成方法を変更しました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 に答える