.net核心在视图中传递枚举

时间:2016-11-18 09:11:39

标签: c# .net-core

我创建了一个创建模型的视图。模型有枚举字段,如下所示:

public ProjectType ProjectType { get; set; }
public enum ProjectType : int
{
    type1= 1,
    type2 = 2,
    type3 = 3,
    other = 4
}

在视图中,我这样显示:

<div class="form-group">
    @Html.LabelFor(m => m.ProjectType, new { @class = "col-md-2 control-label" })
    <div class="col-md-10">
        @Html.DropDownListFor(m => m.ProjectType,Model.ProjectType, new { @class = "form-control" })
        @Html.ValidationMessageFor(m => m.ProjectType)
    </div>
</div>

当我试图达到此视图时,我收到错误:

  

没有任何论据符合所要求的形式   参数'htmlAttributes'的   'IHtmlHelper<Project>.DropDownListFor<TResult>(Expression<Func<Project, TResult>>, IEnumerable<SelectListItem>, string, object)'

我尝试通过创建Html帮助程序解决这个问题,但我需要使用System.Web.Mvc,但我可以将其添加到.net核心项目中 还有其他解决办法吗?

1 个答案:

答案 0 :(得分:1)

我认为您无法将枚举直接绑定到下拉列表。

尝试添加一个帮助器构造,如List<SelectListItem>,你可以绑定下拉列表。

public class ProjectViewModel
{
    public ProjectViewModel()
    {
        ProjectTypes = new List<SelectListItem>();
    }

    public string SelectedProject { get; set; }
    public List<SelectListItem> ProjectTypes { get; set; }
}

你可以在你的视图中使用它,如:

@model ProjectViewModel

<select asp-for="SelectedProject" asp-items="@(Model.ProjectTypes)">
     <option>Please select one</option>
</select>

这应该导致这个结果:

DropDownList

枚举类保持不变

public enum ProjectType : int
{
    type1 = 1,
    type2 = 2,
    type3 = 3,
    other = 4
}