Создание выпадающего месяца в C # ASP.NET MVC - PullRequest
32 голосов
/ 26 мая 2010

Этот метод кажется глупым и немного тяжелым; Есть ли более оптимальный способ создания того же самого (его для MVC View Dropdown)

private List<KeyValuePair<int, string>> getMonthListDD
{
    get
    {
        var dDur = new List<KeyValuePair<int, string>>();
        dDur.Add(new KeyValuePair<int, string>(1, "January"));
        dDur.Add(new KeyValuePair<int, string>(2, "Febuary"));
        dDur.Add(new KeyValuePair<int, string>(3, "March"));
        dDur.Add(new KeyValuePair<int, string>(4, "April"));
        dDur.Add(new KeyValuePair<int, string>(5, "May"));
        dDur.Add(new KeyValuePair<int, string>(6, "June"));
        dDur.Add(new KeyValuePair<int, string>(7, "July"));
        dDur.Add(new KeyValuePair<int, string>(8, "August"));
        dDur.Add(new KeyValuePair<int, string>(9, "September"));
        dDur.Add(new KeyValuePair<int, string>(10, "October"));
        dDur.Add(new KeyValuePair<int, string>(11, "November"));
        dDur.Add(new KeyValuePair<int, string>(12, "December"));

        return dDur;
    }
}

Ответы [ 8 ]

67 голосов
/ 26 мая 2010

В вашей модели представления вы можете иметь свойство Months:

public IEnumerable<SelectListItem> Months
{
    get 
    {
        return DateTimeFormatInfo
               .InvariantInfo
               .MonthNames
               .Select((monthName, index) => new SelectListItem
               {
                   Value = (index + 1).ToString(),
                   Text = monthName
               });
    }
}

, который может быть напрямую связан с DropDownListFor:

<%= Html.DropDownListFor(x => x.SelectedMonth, Model.Months) %>
6 голосов
/ 07 ноября 2013

Простота - это золото, поэтому в вашем представлении:

<select id="month">
    @for (Int16 i = 0; i < 12; i++)
    {
        <option value="@i">@DateTimeFormatInfo.InvariantInfo.MonthNames[i]</option>
    }
</select>
6 голосов
/ 26 мая 2010

Основываясь на простом и элегантном ответе Даринса, я подумал, что поделюсь маленьким вспомогательным методом, который я реорганизовал, увидев это:

public static string ComboDaysOfWeek(this HtmlHelper helper, string id, string selectedValue)
{
    var newitems = DateTimeFormatInfo
        .InvariantInfo
        .DayNames
        .Select((dayName, index) => new SelectListItem
        {
            Value = (index + 1).ToString(),
            Text = dayName,
            Selected = (selectedValue == (index + 1).ToString())
        });

    var result = helper.DropDownList(id, newitems).ToHtmlString();
    return result;
}

использование:

<%= Html.ComboDaysOfWeek("ActivityStartDay", Model.ActivityStartDay)%>

[edit] - это в MVC2, поэтому .ToHtmlString () добавляется в метод helper.DropDownList ().

3 голосов
/ 26 мая 2010

Вы можете попробовать что-то вроде:

Dictionary<int, string> dDur = new Dictionary<int, string>();

for (int i = 1; i <= 12; i++)
{
    dDur.Add(i, CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(i));
}

return dDur;

Запомните и добавьте директиву использования для System.Globalization в верхней части вашего класса.

2 голосов
/ 18 сентября 2018

Попробуйте это,

за месяц.

@Html.DropDownListFor(model => model.Month, Enumerable.Range(1, 12).Select(x => new SelectListItem { Value = x.ToString(), Text = System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat.GetMonthName(x) }), "Select Month", new { @class = "form-control" })

за год.

@Html.DropDownListFor(model => model.Year, Enumerable.Range(DateTime.Now.Year, 10).Select(x => new SelectListItem { Value = x.ToString(), Text = x.ToString() }), "Select Year", new { @class = "form-control" })
2 голосов
/ 11 ноября 2013

Свяжите это прямо с выпадающим списком

for (int i = 1; i <= 12; i++)
{
    MonthDropdown.Items.Add(new ListItem(CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(i), i.ToString()));
}
1 голос
/ 15 июня 2013

Это сработало для меня.

       get
        {
            var list = new List<SelectListItem>();
            list.Add(new SelectListItem() { Text = "Select Month", Value = "0" });
            list.AddRange(DateTimeFormatInfo
                  .InvariantInfo
                  .MonthNames
                  .Where(m => !String.IsNullOrEmpty(m))
                  .Select((monthName, index) => new SelectListItem
                  {
                      Value = (index + 1).ToString(),
                      Text = monthName
                  }).ToList());

            return list;

        }
1 голос
/ 26 мая 2010

Почему вы не можете использовать Dictionary<int, string> вместо List<KeyValuePair<int, string>>

for(int i=1; i<=12; i++)
    myDict.Add(i, CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(i));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...