Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc SelectListItem的Selected属性和SelectItem的selectedValue参数不工作_Asp.net Mvc_Enums_Html Helper_Selectlist - Fatal编程技术网

Asp.net mvc SelectListItem的Selected属性和SelectItem的selectedValue参数不工作

Asp.net mvc SelectListItem的Selected属性和SelectItem的selectedValue参数不工作,asp.net-mvc,enums,html-helper,selectlist,Asp.net Mvc,Enums,Html Helper,Selectlist,我正在尝试开发一个HtmlHelper扩展方法:EnumDropDownListFor。无论我做了什么,我都无法显示所选的值。我尝试设置SelectListItem的Selected=true属性和SelectList构造函数的selectedValue。在调试时(在返回行),我可以看到SelectLİstItem的Selected=true,这两种情况下都应该选择SelectLİstItem。但当我“查看源”时,没有一个选项选择了=“selected”属性 我哪里做错了 注意:Toolkit是

我正在尝试开发一个HtmlHelper扩展方法:EnumDropDownListFor。无论我做了什么,我都无法显示所选的值。我尝试设置SelectListItem的Selected=true属性和SelectList构造函数的selectedValue。在调试时(在返回行),我可以看到SelectLİstItem的Selected=true,这两种情况下都应该选择SelectLİstItem。但当我“查看源”时,没有一个选项选择了=“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);
    }
public static MvcHtmlString EnumDropDownListFor(
此HtmlHelper助手,表达式,字符串optionLabel=null,
对象htmlAttributes=null),其中TModel:class
{
var selectedValue=helper.ViewData.Model==null
?默认值(t属性)
:expression.Compile()(helper.ViewData.Model);
var enumVals=Toolkit.GetEnumValues(typeof(TProperty));
//var selectList=来自enumVals.OfType()中的enumVal
//选择新的SelectListItem
//                 {
//Text=enumVal.GetName(),
//Value=enumVal.ToByte().ToString(),
//Selected=Equals(enumVal,Toolkit.To(selectedValue))
//                 };
//ViewData[(expression.Body作为MemberExpression.Member.Name]=Toolkit.To(selectedValue.ToByte().ToString();
var selectList=new selectList(来自enumVals.OfType()中的enumVal)
选择新的
{
TextField=enumVal.GetName(),
ValueField=enumVal.ToByte().ToString()
},ValueField,TextField,Toolkit.To(selectedValue.ToByte().ToString());
return helper.DropDownListFor(表达式、selectList、optionLabel、htmlAttributes);
}
我解决了它(:
这是因为我使用返回枚举类型的同一表达式调用“helper.DropDownListFor”,并且我试图通过“Byte”设置选项的值铸造的值。因此,表达式的返回值似乎覆盖了给定的选定值,这很有意义。

您能告诉我您是如何解决这个问题的吗?我目前面临着同样的问题。您如何解决这个问题?