1

実際、月の値が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>

問題は次のとおりです。

3月を選択した場合、または値が31 janのアイテムが表示され、それ以外の場合は選択したアイテムが表示されます。

4

2 に答える 2

2

ListItemsの値は一意である必要があります。

デフォルトで選択されているアイテムはJan(値= 31)であるため、別の値(29および30)のアイテムをクリックすると、すべてが正常に機能します。

3月、5月、7月(値= 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());

したがって、何もハードコーディングする必要はありません。すべてがすでに.NETFCLにあります。リストへのインデックスから月の番号を決定するだけです。

于 2011-01-17T12:53:03.170 に答える
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を使用して、日数の値を取得します。

于 2011-01-17T12:53:49.067 に答える