从不是默认显示下拉列表的下拉列表中捕获值

时间:2018-10-31 04:40:35

标签: c# asp.net data-binding dropdown

我想在DropDown列表中捕获所选日期,DropdownList上将显示五天。

我通常将默认值放在DropDown上,但是这次不这样做,因为我希望在下拉列表中始终显示当前日期和接下来的五天。但是我不知道如何捕获数据。

<asp:DropDownList ID="ddldate" runat="server">
</asp:DropDownList>

protected void Page_Load(object sender, EventArgs e)
{
    List<ListItem> items = new List<ListItem>();

    for (int i = 0; i < 5; i++)
    {
        items.Add(new ListItem(
          DateTime.Now.AddDays(i).ToShortDateString(), 
          DateTime.Now.AddDays(i).ToShortDateString()));
    }
    ddldate.DataSource = items;
    ddldate.DataBind();
    ddldate.Items[0].Selected = true;
}

protected void Button1_Click(object sender, EventArgs e)
{
    string deliverytime = ddldate.SelectedValue.ToString();
    lbltest.Text = deliverytime;
}

2 个答案:

答案 0 :(得分:5)

您不应在PostBack上绑定数据,请将FormLoad代码更改为以下示例:

protected void Page_Load(object sender, EventArgs e)
{
    if(!Page.IsPostBack)
    {
        List<ListItem> items = new List<ListItem>();

        for (int i = 0; i < 5; i++)
        {
            items.Add(new ListItem(DateTime.Now.AddDays(i).ToShortDateString(), DateTime.Now.AddDays(i).ToShortDateString()));
        }
        ddldate.DataSource = items;
        ddldate.DataBind();
        ddldate.Items[0].Selected = true;
    }   
}

如果您将PostBack属性作为条件进行检查,则SelectedValue将保留,否则DropDown将绑定在每个页面上。

我还建议您在使用SelectedValue之前先检查其状态,如果此null,请不要尝试获取价值,请检查以下代码:

protected void Button1_Click(object sender, EventArgs e)
{
    if(ddldate.SelectedValue != null)
    {
        string deliverytime = ddldate.SelectedValue.ToString();
        lbltest.Text = deliverytime;
    }
}

答案 1 :(得分:5)

您将为每次回发重新填充DropDownList并重新加载页面,因此SelectedValue属性值可能与发布的值不同。只需对IsPostBack进行检查,以防止在回发时重新填充DropDownList数据:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        List<ListItem> items = new List<ListItem>();

        for (int i = 0; i < 5; i++)
        {
           items.Add(new ListItem(DateTime.Now.AddDays(i).ToShortDateString(), DateTime.Now.AddDays(i).ToShortDateString()));
        }

        ddldate.DataSource = items;
        ddldate.DataBind();
        ddldate.Items[0].Selected = true;
    }
}