【问题标题】:EnumDropDownListFor with Enum string valueEnumDropDownListFor 与枚举字符串值
【发布时间】:2017-10-02 07:49:24
【问题描述】:

我有一个像这样的枚举:

public enum StateEnum
{
    Updated = 0,
    Pending = 1,
    Failed = 2
}

辅助函数@Html.EnumDropDownListFor(model => Model.State, "States")正在渲染:

<select id="State" name="State">
     <option value="0">Updated</option>
     <option value="1">Pending</option>
     <option value="2">Failed</option>
</select>

我的问题是:如何在option 值属性中使用枚举字符串值而不是整数?喜欢:

<select id="State" name="State">
     <option value="Updated">Updated</option>
     <option value="Pending">Pending</option>
     <option value="Failed">Failed</option>
</select>

(在下一页Url中会更人性化)

我可以在 htmlhelper 扩展中重写Html.EnumDropDownListFor 函数,但没有更好的解决方案?

【问题讨论】:

  • 您可以随时使用javascript更新每个选项的value属性,(或编写您自己的扩展方法)

标签: asp.net-mvc html-helper


【解决方案1】:

您可以使用Enum.GetNames 将枚举的所有值作为字符串获取。然后,您可以将此列表传递给模型,并使用@Html.DropDownListFor(x =&gt; x.Test, new SelectList(Model.Values)) 创建下拉列表。

您可以在以下小提琴中看到这一点:https://dotnetfiddle.net/ynK4ss

【讨论】:

  • 谢谢这是一个解决方案,但如果我们在模型中有多个枚举,它可能会非常粗暴,我更喜欢编写一个辅助扩展
【解决方案2】:

您可以按照 Andy 的建议创建 SelectList,或者您可以使用带有如下吸气剂的 StateString 属性:

public StateEnum State { get; set; }

public string StateString 
{ 
    get { return State.ToString(); } 
}

或者如果State是字符串属性,则在EnumDropDownListFor中绑定StateEnum并将模型更改为:

public StateEnum StateEnum { get; set; }

public string State
{ 
    get { return StateEnum.ToString(); } 
}

【讨论】:

    【解决方案3】:

    使用 Andy 的 anwser,我编写了一个助手,但不确定这是不是最好的方法。如果任何机构有更好的解决方案

    public static MvcHtmlString EnumDropDownListWithStringFor<TModel, TEnum>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TEnum>> expression, string optionLabel, object htmlAttributes)
    {
        var selectListItem = Enum.GetNames(Nullable.GetUnderlyingType(typeof(TEnum))).Select(p => new SelectListItem() { Value = p, Text = p }).ToList();
        return SelectExtensions.DropDownListFor(htmlHelper, expression, selectListItem, optionLabel, htmlAttributes);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 2016-12-14
      相关资源
      最近更新 更多