我想在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;
}
答案 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;
}
}