首页 > 解决方案 > Html.GetEnumSelectList 和预选值(编辑页面)

问题描述

    public enum PageType
    {
        [Display(Name = "Brak")]
        None = 0,
        [Display(Name = "Strona")]
        Page = 1,
        [Display(Name = "Sklep")]
        Shop = 2,
        [Display(Name = "Error")]
        Error = 3
    } 

查看模型-ValueTypeEditViewModel包含( )ValueTypeModelConrollerstring

对于我正在使用的下拉列表:

        <div class="form-group">
            <label asp-for="ValueType.Controller" class="m-1"></label>
            <div><span asp-validation-for="ValueType.Controller" class="text-danger"></span></div>
            <select class="custom-select" asp-for="ValueType.Controller" asp-items="Html.GetEnumSelectList<ValueTypeModel.PageType>()"></select>
        </div>

它完美地生成了一个下拉列表,但是当我编辑之前选择的页面时Value Type.Controller没有选择。在我保存值之前,我必须对值做一些逻辑,wchich 是一个数字(字符串),以将其传输到名称并保存单​​词。这项工作就像我选择[Display(Name = "Strona")] Page = 1,然后Value Type.Controller是一个字符串1,我必须查找名称并保存到数据库Page

质疑如何使用先前选择的值呈现下拉菜单

标签: c#enumsdropdown

解决方案


这不是真正的完整答案 - 只是讨厌解决问题

    <div class="form-group">
        <label asp-for="ValueType.Controller" class="m-1"></label>
        <div><span asp-validation-for="ValueType.Controller" class="text-danger"></span></div>
        <select class="custom-select" asp-for="ValueType.Controller">
            @foreach (var e in Enum.GetValues(typeof(ValueTypeModel.PageType)).Cast<int>())
            {
                if (Enum.GetName(typeof(ValueTypeModel.PageType), e) == Model.ValueType.Controller)
                {
                    <option value="@e.ToString()" selected>@Enum.GetName(typeof(ValueTypeModel.PageType), e)</option>
                }
                else
                {
                    <option value="@e.ToString()">@Enum.GetName(typeof(ValueTypeModel.PageType), e)</option>
                }
            }
        </select>
    </div>

推荐阅读