0

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

1 回答 1

0

我解决了它(:那是因为我用返回枚举类型的相同表达式调用“helper.DropDownListFor”,并且我试图通过“字节”强制转换值设置选项值。所以似乎表达式的返回值覆盖了给定选定的值,很有意义。

于 2012-09-22T14:00:01.227 回答