Каков наилучший способ составить список раскрывающегося списка за месяц и год для 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");
}
Ответ 9
Вы можете попробовать это...
Здесь:
http://allinworld99.blogspot.com/2015/01/bind-monthsyear-dropdownlist-c-aspnet.html
for (int i = 1; i <= 12; i++)
{
drpBMonth.Items.Add(new System.Web.UI.WebControls.ListItem(DateTimeFormatInfo.CurrentInfo.GetMonthName(i), i.ToString()))};