ASP.MVC Enum DropDownListFor

时间:2015-06-18 07:57:06

标签: c# asp.net asp.net-mvc-4 enums html.dropdownlistfor

我的EnumHelper对DropDownListFor有一个非常特殊的失败。我写下面的代码:

    public static IHtmlString EnumDropDownListFor<TModel, TEnum>(this HtmlHelper<TModel> html, Expression<Func<TModel, TEnum>> expression, object htmlAttribute)
    {
        var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);

        var enumType = Nullable.GetUnderlyingType(metadata.ModelType) ?? metadata.ModelType;

        var enumValues = Enum.GetValues(enumType).Cast<object>();

        var items = from enumValue in enumValues
                    select new SelectListItem
                    {
                        Text = enumValue.ToString(),
                        Value = ((int)enumValue).ToString(),
                        Selected = enumValue.Equals(metadata.Model)
                    };
        return html.DropDownListFor(expression, items, string.Empty, htmlAttribute);
    }

我在两种不同的情况下称呼这个助手:

@EnumHelper.EnumDropDownListFor(Html, model => model.Part.Option, new { @class = "form-control checkpoint-choice toggle-comment" })

@EnumHelper.EnumDropDownListFor(Html, model => model.Part.ReviewGates[iRG].Option, new { @class = "form-control checkpoint-choice toggle-comment" })

每个调用引用相同的枚举。如果我更改值并保存它,绑定适用于这两个示例。 但只有第二个示例将在加载网站后选择默认值或保存的值。这两个示例都在同一个网站上,一个mvc创建网站。该模型具有如下约束力:

@model presta.APQP.Base.ViewModels.UIPart

当我检查来自HtmlHelper类的返回值时,我可以看到items中的一个项目将属性Selected设置为true,但是html.DropDownListfor生成没有选择选项的html代码。

有什么想法吗?

感谢您的帮助...

0 个答案:

没有答案