使用枚举不起作用的MVC 4下拉列表选择值

时间:2014-08-27 17:53:35

标签: html asp.net-mvc

所以,我有一个包含团队成员列表的模型。这些团队成员中的每一个都有一个与该成员相关的期刊列表。这些期刊都有与我们相关的状态,我使用枚举。

public enum DailyEntryStatus
{
    [Description("NA")]
    NA,
    [Description("Void")]
    Void,
    [Description("Submitted")]
    Submitted,
    [Description("Rejected")]
    Rejected,
    [Description("Approved")]
    Approved
};

我的问题是,我在模型中的团队成员日记列表中查看了我对每个日记的观点。我能够使用枚举值填充下拉列表,但我希望在下拉列表中选择当前状态。

@Html.DropDownList("StatusFilter", EnumSelectListExtensions.DailyEntryStatusList(oEntry.Status), new { @class = "input-medium" })

我正在使用扩展方法DailyEntryStatusList(枚举状态)来填充以枚举状态为参数的列表。 (oEntry.Status是循环中的当前日志状态)

public static class EnumSelectListExtensions
{
    public static IEnumerable<SelectListItem> DailyEntryStatusList(DailyEntryStatus eStatus)
    {
        var oList = from Enum e in Enum.GetValues(typeof (DailyEntryStatus))
                    select new {Value = e.ToString(), Name = e.ToString()};

        return new SelectList(oList, "Value", "Name", eStatus.ToString());
    }   
 }

我已经尝试了几种方法让它在没有运气的情况下工作,也许我只是以错误的方式去做。非常感谢帮助。

3 个答案:

答案 0 :(得分:0)

我的预感是你正在实例化一个匿名对象,它希望列表有IEnumerable<SelectListItem>

select new SelectListItem {Value = e.ToString(), Name = e.ToString()};

答案 1 :(得分:0)

我不确定你所做的是什么问题,但试试这个。

public static class EnumSelectListExtensions
{
    public static SelectList DailyEntryStatusList(DailyEntryStatus eStatus)
    {
         return new SelectList(Enum.GetNames(typeof(DailyEntryStatus)), eStatus.ToString());     
   }   
 }

我做了两件事。将返回类型更改为SelectList而不是SelectListItems的通用列表。另一件事是我简化了如何将枚举值加载到列表中。如果有效,请告诉我。

唯一的问题是您没有指定它们显示的顺序,但您可以根据需要进行更改。

答案 2 :(得分:0)

总愚蠢的时刻。一切都很好,它在jQuery中被改变了。实际上已将扩展方法更改为仅使用实际枚举状态来生成列表

public static SelectList ToSelectList<TEnum>(this TEnum enumObj) where TEnum : struct, IComparable, IFormattable, IConvertible
    {
        var values = from TEnum e in Enum.GetValues(typeof(TEnum))
                     select new { Id = e, Name = e.ToString() };
        return new SelectList(values, "Id", "Name", enumObj);
    }