实际上我在第一个列表中显示选择月份的月份,如果月份的值不是31,则显示在顶部,否则它显示jan在顶部如何显示另一个?
这是代码:
代码背后:
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList2.Items.Clear();
for (int i = 1; i <= int.Parse(DropDownList1.SelectedValue); i++)
{
DropDownList2.Items.Add(new ListItem("" + i));
}
}
设计师来源:
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
<asp:ListItem Value="31">Jan</asp:ListItem>
<asp:ListItem Value="29">Feb</asp:ListItem>
<asp:ListItem Value="31">Mar</asp:ListItem>
<asp:ListItem Value="30">April</asp:ListItem>
<asp:ListItem Value="31">May</asp:ListItem>
<asp:ListItem Value="30">June</asp:ListItem>
<asp:ListItem Value="31">July</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="DropDownList2" runat="server">
</asp:DropDownList>
问题是:
如果我选择游行或者可能或者任何值为31 jan的项目显示在,而在其他情况下会显示所选项目。
答案 0 :(得分:2)
ListItems的值应该是唯一的。
默认选择的项目是Jan(值= 31),因此当您点击具有其他值(29和30)的项目时,一切都会正常工作。
当您点击Mar,May,July(值= 31)时,Jan将被选中。
要实现您想要的行为,请使用其他方法。
最佳解决方案是:
using System.Linq;
int count = DateTime.DaysInMonth(
DateTime.Today.Year,
int.Parse(DropDownList2.SelectedIndex + 1)); // sic!
DropDownList2.Items.AddRange(
Enumerable.Range(1, count)
.Select(i => new ListItem(i.ToString()))
.ToArray());
所以你不需要硬编码任何东西!一切都已经在.NET FCL中了。只需将月份的数字从它的索引中确定到列表中即可。
答案 1 :(得分:1)
我做了一些研究,这不是一个不寻常的问题。在回发后,asp.net将显示列表中包含所选值的第一项。我发现它的唯一方法是使所有值都是唯一的,例如:
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
<asp:ListItem Value="Jan-31">Jan</asp:ListItem>
<asp:ListItem Value="Feb-29">Feb</asp:ListItem>
<asp:ListItem Value="Mar-31">Mar</asp:ListItem>
<asp:ListItem Value="April-30">April</asp:ListItem>
<asp:ListItem Value="May-31">May</asp:ListItem>
<asp:ListItem Value="June-30">June</asp:ListItem>
<asp:ListItem Value="July-31">July</asp:ListItem>
</asp:DropDownList>
然后在DropDownList1_SelectedIndexChanged事件中使用' - '上的string.split来获取日计数值。