Подтвердить что ты не робот

Создание расписания в С# ASP.NET MVC

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

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;
    }
}
4b9b3361

Ответ 1

В вашей модели просмотра у вас может быть свойство 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) %>

Ответ 2

На основе простого и элегантного ответа darins я думал, что поделился бы небольшим вспомогательным методом, который я реорганизовал в результате этого:

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, поэтому в метод helper.DropDownList() добавлен .ToHtmlString().

Ответ 3

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

<select id="month">
    @for (Int16 i = 0; i < 12; i++)
    {
        <option value="@i">@DateTimeFormatInfo.InvariantInfo.MonthNames[i]</option>
    }
</select>

Ответ 4

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

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 в верхней части вашего класса.

Ответ 5

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

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

Ответ 6

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

       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;

        }

Ответ 7

Привяжите его прямо к выпадающему меню

for (int i = 1; i <= 12; i++)
{
    MonthDropdown.Items.Add(new ListItem(CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(i), i.ToString()));
}