试图将我的项目更新为MVC3,但我却找不到:
我有一个简单的ENUMS数据类型:
public enum States() { AL,AK,AZ,...WY }
我想在包含此数据类型的模型视图中用作DropDown / SelectList:
public class FormModel() { public States State {get; set;} }
非常简单:当我将自动生成视图用于此局部类时,它将忽略此类型。
我需要一个简单的选择列表,当我通过AJAX-JSON POST方法命中提交和处理时,将枚举的值设置为选定项。
并且比视图(???!):
<div class="editor-field"> @Html.DropDownListFor(model => model.State, model => model.States) </div>
预先感谢您的建议!
我刚刚为自己的项目制作了一个。下面的代码是我的帮助器类的一部分,我希望我得到了所有需要的方法。如果它不起作用,请写一条评论,我会再次检查。
public static class SelectExtensions { public static string GetInputName<TModel, TProperty>(Expression<Func<TModel, TProperty>> expression) { if (expression.Body.NodeType == ExpressionType.Call) { MethodCallExpression methodCallExpression = (MethodCallExpression)expression.Body; string name = GetInputName(methodCallExpression); return name.Substring(expression.Parameters[0].Name.Length + 1); } return expression.Body.ToString().Substring(expression.Parameters[0].Name.Length + 1); } private static string GetInputName(MethodCallExpression expression) { // p => p.Foo.Bar().Baz.ToString() => p.Foo OR throw... MethodCallExpression methodCallExpression = expression.Object as MethodCallExpression; if (methodCallExpression != null) { return GetInputName(methodCallExpression); } return expression.Object.ToString(); } public static MvcHtmlString EnumDropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression) where TModel : class { string inputName = GetInputName(expression); var value = htmlHelper.ViewData.Model == null ? default(TProperty) : expression.Compile()(htmlHelper.ViewData.Model); return htmlHelper.DropDownList(inputName, ToSelectList(typeof(TProperty), value.ToString())); } public static SelectList ToSelectList(Type enumType, string selectedItem) { List<SelectListItem> items = new List<SelectListItem>(); foreach (var item in Enum.GetValues(enumType)) { FieldInfo fi = enumType.GetField(item.ToString()); var attribute = fi.GetCustomAttributes(typeof(DescriptionAttribute), true).FirstOrDefault(); var title = attribute == null ? item.ToString() : ((DescriptionAttribute)attribute).Description; var listItem = new SelectListItem { Value = ((int)item).ToString(), Text = title, Selected = selectedItem == ((int)item).ToString() }; items.Add(listItem); } return new SelectList(items, "Value", "Text", selectedItem); } }
用作:
Html.EnumDropDownListFor(m => m.YourEnum);
更新资料
我创建了替代HTML助手。使用它们所需要做的就是在中更改baseviewpage views\web.config。
views\web.config
有了他们,您可以做:
@Html2.DropDownFor(m => m.YourEnum); @Html2.CheckboxesFor(m => m.YourEnum); @Html2.RadioButtonsFor(m => m.YourEnum);
此处提供更多信息:http : //blog.gauffin.org/2011/10/first-draft-of-my-alternative- html-helpers/