Создание расписания в С# 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;
}
}
Ответы
Ответ 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()));
}