Извините, если это дубликат, мой поиск ничего не обнаружил.
Я использую следующий метод для создания выпадающих списков для типов перечислений (снятых здесь: http://addinit.com/?q=node/54):
public static string DropDownList(this HtmlHelper helper, string name, Type type, object selected)
{
if (!type.IsEnum)
throw new ArgumentException("Type is not an enum.");
if(selected != null && selected.GetType() != type)
throw new ArgumentException("Selected object is not " + type.ToString());
var enums = new List<SelectListItem>();
foreach (int value in Enum.GetValues(type))
{
var item = new SelectListItem();
item.Value = value.ToString();
item.Text = Enum.GetName(type, value);
if(selected != null)
item.Selected = (int)selected == value;
enums.Add(item);
}
return System.Web.Mvc.Html.SelectExtensions.DropDownList(helper, name, enums, "--Select--");
}
Он работает отлично, за исключением одного. Если я дам выпадающему списку то же имя, что и свойство на моей модели, выбранное значение не будет установлено должным образом. Это означает, что это работает:
<%= Html.DropDownList("fam", typeof(EnumFamily), Model.Family)%>
Но это не так:
<%= Html.DropDownList("family", typeof(EnumFamily), Model.Family)%>
Поскольку я пытаюсь передать весь объект непосредственно методу контроллера, который я отправляю, мне бы очень хотелось иметь раскрывающийся список, названный для свойства на модели. При использовании "правильного" имени выпадающее сообщение корректно выводится, я просто не могу установить выбранное значение.
Я не думаю, что это имеет значение, но я запускаю MVC 1 на mono 2.6
edit: Я просто тестировал это на окнах, и я вижу то же поведение