Каков наилучший способ составить список раскрывающегося списка за месяц и год для ASP.NET?

У меня есть внутреннее приложение, для которого мне нужен выпадающий список для двух элементов типа даты: Месяц и Год. Эти значения не находятся в базе данных или другом репозитории информации.

Я знаю, что могу просто настроить список со значениями, которые мне нужны, добавив их в словарь как объект (мне нужно сопоставить месяц с численным представлением, январь = > 01):

var months = new Dictionary<String,String>();
months.Add("01", "January");
...

Выпадающий список за год будет немного проще, поскольку я могу просто выбрать начальный год и повторить до текущего или текущего + 1 год в общем списке.

Есть ли лучший способ обработки этих элементов данных? Что-то встроенное или хороший дизайн, который я должен реализовать?

Ответ 1

Вы можете использовать это, чтобы получить список всех имен Month и пропустить его.

CultureInfo.CurrentCulture.DateTimeFormat.MonthNames

Вы можете использовать его так: используя индекс месяца как значение для раскрывающегося списка

var months = CultureInfo.CurrentCulture.DateTimeFormat.MonthNames;
for (int i = 0; i < months.Length; i++)
{
     ddl.Items.Add(new ListItem(months[i], i.ToString()));
}

Ответ 2

Расширение ответа @Jesse Brown...

С директивой , использующей System.Globalization, у меня есть следующий код:

for (int x = 0; x < 12; x++)
{
    cboMonth.Items.Add
    (
       (x+1).ToString("00") 
       + " " 
       + CultureInfo.CurrentCulture.DateTimeFormat.MonthNames.GetValue(x)
     );
}

Создает выпадающий список, который выглядит следующим образом:

01 января 02 февраля 03 марта ... 12 декабря

Дальнейшее уточнение может заключаться в том, чтобы отобразить месяц текущего месяца, добавив:

cboMonth.Text = DateTime.Now.Month.ToString("00") 
   + " " 
   + CultureInfo.CurrentCulture.DateTimeFormat.MonthNames.GetValue(DateTime.Now.Month);

После цикла for.

Ответ 3

Вот мое решение, которое очень похоже на решение @jesse-brown (принятый ответ)

VB.NET:

В глобальном классе функций:

Public Shared Function GetMonthList() As Generic.Dictionary(Of String, String)
    Dim months As New Generic.Dictionary(Of String, String)()
    For m As Int32 = 1 To 12
        months.Add(String.Format("{0:0#}", m), CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(m))
    Next

    Return months
End Function

На странице ASPX:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    ddMonth.DataSource = GlobalFunctions.GetMonthList()
    ddMonth.DataValueField = "Key"
    ddMonth.DataTextField = "Value"
    ddMonth.DataBind()

End Sub

Эта реализация находится в VB.NET, потому что это то, что использует этот webapp (наследие), однако большое спасибо за примеры на С# (мой предпочтительный язык), я размещаю VB.NET здесь также помогите сообществу VB.NET.

Ответ 4

Для ASP.NET MVC это то, что я делаю.

Примечание Я предпочитаю использовать codebehind для таких вещей, как это - его все еще часть представления, и нет ничего плохого в представлении, создающем SelectList.

PaymentControl.ascx

 <%= Html.DropDownList("ExpirationMonth", ExpirationMonthDropdown)%> / 
 <%= Html.DropDownList("ExpirationYear", ExpirationYearDropdown)%>

PaymentControl.ascx.cs

public partial class PaymentControl : ViewUserControl<CheckoutModel>
    {
        public IEnumerable<SelectListItem> ExpirationMonthDropdown
        {
            get
            {
                return Enumerable.Range(1, 12).Select(x =>

                    new SelectListItem()
                    {
                        Text = CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedMonthNames[x - 1] + " (" + x + ")",
                        Value = x.ToString(),
                        Selected = (x == Model.ExpirationMonth)
                    });
            }
        }

        public IEnumerable<SelectListItem> ExpirationYearDropdown
        {
            get
            {
                return Enumerable.Range(DateTime.Today.Year, 20).Select(x =>

                new SelectListItem()
                {
                    Text = x.ToString(),
                    Value = x.ToString(),
                    Selected = (x == Model.ExpirationYear)
                });
            }
        }
    }

Ответ 5

Ниже код относится к выгрузке месяца загрузки: Выбрать

    private void LoadMonth()
    {
        ddlmonth.Items.Add(new ListItem("Select", 0.ToString()));
        var months = CultureInfo.CurrentCulture.DateTimeFormat.MonthNames;
        for (int i = 0; i < months.Length-1; i++)
        {
            ddlmonth.Items.Add(new ListItem(months[i], (i+1).ToString()));
        }
    }

Ответ 6

 public void bind_month()
    {
        var months = CultureInfo.CurrentCulture.DateTimeFormat.MonthNames;

        ddl_month.Items.Insert(0, new ListItem("--Select--", "0"));

        for (int i = 0; i < months.Length-1; i++)
        {
            ddl_month.Items.Add(new ListItem(months[i],(i+1).ToString()));
        }

    }

Ответ 7

/Попробуйте этот код, чтобы связать весь месяц в раскрывающемся списке без использования базы данных /

 public void GetMonthList(DropDownList ddl)
    {
        DateTime month = Convert.ToDateTime("1/1/2000");
        for (int i = 0; i < 12; i++)
        {
            DateTime NextMont = month.AddMonths(i);
            ListItem list = new ListItem();
            list.Text = NextMont.ToString("MMMM");
            list.Value = NextMont.Month.ToString();
            ddl.Items.Add(list);
        }
        //ddl.Items.Insert(0, "Select Month");
        ddl.Items.FindByValue(DateTime.Now.Month.ToString()).Selected = true;
    }

Ответ 8

Привязать все название месяца в выпадающем

 public void BindMonthNameInDropDownList(DropDownList ddlMonth)
    {
        DateTime CurrentMonth = Convert.ToDateTime("1/1/2000");
        for (int i = 0; i < 12; i++)
        {
            DateTime NextMonth = CurrentMonth.AddMonths(i);
            ListItem list = new ListItem();
            list.Text = NextMonth.ToString("MMMM");
            list.Value = NextMonth.Month.ToString();
            ddlMonth.Items.Add(list);
        }
        ddlMonth.Items.Insert(0, "Select Month");

    }