【问题标题】:MVC 4 dropdownlist selected value using enum not working使用枚举的 MVC 4 下拉列表选择值不起作用
【发布时间】:2014-08-28 03:54:32
【问题描述】:

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

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(enum status) 来填充以枚举状态作为参数的列表。 (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());
    }   
 }

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

【问题讨论】:

  • 您确定 eStatus 已正确传入并且与列表中的一项匹配吗?你有没有通过确认?
  • 是的,正在显示每一个的正确状态。
  • @Html.DropDownList("StatusFilter", .. 正在呈现&lt;select name="StatusFilter" .. 并选择属性StatusFilter 的当前值,但我怀疑这不是属性的完全限定名称,因为它是一个集合。它应该有一个类似于Journals[0].StatusFilter 的名称。请发布您用于构建视图的模型和循环
  • 这最终成为我这边的一个问题。该下拉菜单是 jQuery 的目标,并且选定的 val 被默认为第一个。我猜只是其中的一天。

标签: html asp.net-mvc


【解决方案1】:

我的预感是您正在实例化一个匿名对象,它期望列表为 IEnumerable&lt;SelectListItem&gt;

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

【讨论】:

  • 如果是这样的话,我不会在生成列表时得到对象未设置为对象实例的异常。
  • 我相信他的所作所为是正确的,虽然显然有问题。
【解决方案2】:

我不确定你正在做的事情是什么问题,但试试这个。

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

我做了两件事。将返回类型更改为 SelectList 而不是 SelectListItems 的通用列表。另一件事是我简化了将枚举值加载到列表中的方式。让我知道它是否有效。

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

【讨论】:

    【解决方案3】:

    完全愚蠢的时刻。一切正常,它正在 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);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多