Przepraszam, jeśli to jest dup, moje poszukiwania nie przyniosły niczego.Wybrany element na liście rozwijanej z programu Enum w ASP.net MVC
używam następujące metody generowania list rozwijanych dla typów enum (zniesione stąd: 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--");
}
To działa dobrze, z wyjątkiem jednej rzeczy. Jeśli nadam liście rozwijanej tę samą nazwę, co właściwość w moim modelu, wybrana wartość nie jest ustawiona prawidłowo. Znaczenie to działa:
<%= Html.DropDownList("fam", typeof(EnumFamily), Model.Family)%>
Ale tego nie robi:
<%= Html.DropDownList("family", typeof(EnumFamily), Model.Family)%>
Ponieważ staram się przekazać cały obiekt bezpośrednio do metody kontrolera jestem delegowania do Życzyłbym naprawdę jak mieć listę rozwijaną nazwaną dla właściwości w modelu. Gdy używasz nazwy "prawo", menu rozwijane jest wyświetlane poprawnie, po prostu nie mogę ustawić wybranej wartości.
Nie sądzę, to znaczenie, ale używam MVC 1 na mono 2,6
edit: Właśnie to przetestowane na okna i widzę to samo zachowanie
Widziałem to samo zachowanie i pracowałem przy użyciu innej listy rozwijanej o nazwie. – Nate