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

私はそれを解決しました(:それは、Enum型を返す同じ式で「helper.DropDownListFor」を呼び出しており、「バイト」キャスト値でオプションの値を設定しようとしていたためです。したがって、式の戻り値は指定された値をオーバーライドするようです選択された値は、非常に理にかなっています。

于 2012-09-22T14:00:01.227 に答える