SelectListItem的Selected属性和SelectItem的selectedValue参数不起作用

时间:2012-09-18 21:25:20

标签: asp.net-mvc enums html-helper selectlist

我正在尝试开发一个HtmlHelper扩展方法:EnumDropDownListFor。无论我做了什么,我都无法显示所选的值。我尝试设置SelectListItem的Selected = true属性并设置SelectList构造函数的selectedValue。在调试时(在返回行),对于两种情况,我都可以看到SelectLİstItem的Selected = true,它应该是Selected。但是当我“查看源代码”时,没有任何选项选择=“已选择”属性。

我哪里错了?

注意:Toolkit是我的实用程序类,ToByte是Enum的扩展方法

    public static MvcHtmlString EnumDropDownListFor<TModel, TProperty>(
        this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, string optionLabel = null,
        object htmlAttributes = null) where TModel : class
    {
        var selectedValue = helper.ViewData.Model == null
                                ? default(TProperty)
                                : expression.Compile()(helper.ViewData.Model);

        var enumVals = Toolkit.GetEnumValues(typeof(TProperty));

        //var selectList = from enumVal in enumVals.OfType<Enum>()
        //                 select new SelectListItem
        //                 {
        //                     Text = enumVal.GetName(),
        //                     Value = enumVal.ToByte().ToString(),
        //                     Selected = Equals(enumVal, Toolkit.To<Enum>(selectedValue))
        //                 };


        // helper.ViewData[(expression.Body as MemberExpression).Member.Name] = Toolkit.To<Enum>(selectedValue).ToByte().ToString();

        var selectList = new SelectList(from enumVal in enumVals.OfType<Enum>()
                                        select new
                                        {
                                            TextField = enumVal.GetName(),
                                            ValueField = enumVal.ToByte().ToString()
                                        }, "ValueField", "TextField", Toolkit.To<Enum>(selectedValue).ToByte().ToString());

        return helper.DropDownListFor(expression, selectList, optionLabel, htmlAttributes);
    }

1 个答案:

答案 0 :(得分:0)

我解决了(: 这是因为我调用“helper.DropDownListFor”具有相同的表达式,它返回一个Enum类型,我试图通过“Byte”类型值设置选项的值。因此,似乎Expression的返回值会覆盖给定的选定值,这很有意义。