在ASP.NET Core MVC中选择ENUM Tag Helper

时间:2017-06-26 14:21:53

标签: asp.net-mvc asp.net-core enums asp.net-core-tag-helpers

我需要使用Tag Helper的ENUM下拉列表提供一些帮助。

我发现很多例子将模型绑定到Selectlist,有些使用ENUM但是所有这些都是关于CREATE操作,而我遇到了EDIT操作的问题。

我的模特

 public class ProspectLog
    {
        public int Id { get; set; }
        public int IdProspect { get; set; }
        public int IdEmpresa { get; set; }
        public DateTime Criado { get; set; }
        public string Usuario { get; set; }
        public string Descricao { get; set; }

        public ETipoLog TipoLog { get; set; }

        public enum ETipoLog
        {
            [Display(Name = "CADASTRO")]
            Cadastro = 0,
            [Display(Name = "CONTATO")]
            Contato = 1,
            [Display(Name = @"TROCA ETAPA")]
            Troca = 2,
            [Display(Name = @"QUALIFICAÇÃO")]
            Qualifica = 3,
            [Display(Name = @"EDIÇÃO")]
            Edicao = 4
        }
    }

在我基于MVC5的旧项目中,我只是在我的View上使用它,这已经足够了。

DROPDOWN

<div class="form-group col-sm-6">
   <label style="font-weight: bolder" for="txtSituacao">Situação</label>
   @Html.EnumDropDownListFor(model => model.Situacao, htmlAttributes: new { @class = "form-control" })
   @Html.ValidationMessageFor(model => model.Situacao, "", new { @class = "text-danger" })
</div>

我尝试了一些方法,并且我在编辑操作上设置了数据库项目选择的下拉列表。我试过这种方式:

<div class="form-group">
    <label asp-for="TipoLog" class="col-md-2 control-label"></label>
    <div class="col-md-10">             
         <select asp-for="TipoLog" class="form-control"></select>
         <span asp-validation-for="TipoLog" class="text-danger"></span>
     </div>
</div>

我也尝试过这样:

 <div class="form-group">
     <label asp-for="TipoLog" class="col-md-2 control-label"></label>
     <div class="col-md-10"> 
          <select asp-for="TipoLog" asp-items="Html.GetEnumSelectList<TipoLog>()"></select>
           <span asp-validation-for="TipoLog" class="text-danger"></span>
      </div>
</div>

但它让我遇到编译错误: enter image description here

我还尝试将模型列表绑定到控制器上的ViewBag,这样:

控制器:

ViewBag.Log = new SelectList(lista, "Id", "Nome");

查看:

 <div class="form-group col-sm-2">
      <label asp-for="TipoLogo" class="col-md-2 control-label"></label>
      <select asp-for="TipoLogo" asp-items="ViewBag.Log" class="form-control"></select>
       <span asp-validation-for="TipoLogo" class="text-danger"></span>
</div>

它的工作部分,下拉列出了项目,但未从数据库中选择正确的项目。它将列表中的第一个显示为已选中。

4 个答案:

答案 0 :(得分:5)

您忘记使用&#34; @&#34;

来逃避HTML中的C#代码

尝试:

<select asp-for="TipoLog" asp-items="Html.GetEnumSelectList<TipoLog>()"></select>

更新以在Html.Get ....

之前删除@

答案 1 :(得分:5)

最后我找到了解决方案!

它似乎并不明显,但这样我没有编译错误。我从伊万得到的答案并不正确,但有必要在视图中导入CRM.Model,如:

@using CRM.Model;

所以,我的下拉菜单:

<select asp-for="TipoLog" asp-items="Html.GetEnumSelectList<ETipoLog>()" class="form-control"></select>

enter image description here

你可以看到,Visual Studio告诉我这是不必要的,用灰色绘制它,但没有它,我得到编译错误。我希望我可以帮助别人。

答案 2 :(得分:1)

尝试<select asp-for="TipoLog" asp-items="Html.GetEnumSelectList<ETipoLog>()"></select>

答案 3 :(得分:1)

这对我有用,不需要 using 声明。

<select asp-for="ClientFeeStage"
   asp-items="@Html.GetEnumSelectList(typeof(AT.Domain.Entities.ClientFeeStage))"
   class="form-control">