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

Posted

技术标签:

【中文标题】在 ASP.NET Core MVC 中选择 ENUM Tag Helper【英文标题】:Select ENUM Tag Helper in ASP.NET Core MVC 【发布时间】:2017-06-26 14:21:53 【问题描述】:

我需要一些关于使用 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 的旧项目中,我只是在我的视图上使用了它,这就足够了。

下拉

<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>

但它让我遇到了编译错误:

我还尝试通过这种方式将模型列表绑定到控制器上的 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>

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

【问题讨论】:

我也找到了这个教程:jerriepelser.com/blog/using-enum-aspnet-5-select-taghelper,但正如我上面提到的,它让我遇到了一个异常,我无法解决问题。 【参考方案1】:

我终于找到了解决办法!

这似乎并不明显,但这样我就没有编译错误!!!我从 Ivan 那里得到的答案并没有错,但是需要在视图上导入 CRM.Model,例如:

@using CRM.Model;

所以,我的下拉菜单:

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

您可以看到,Visual Studio 告诉我这是不必要的,将其涂成灰色,但没有它,我得到编译错误。我希望我能帮助别人。

【讨论】:

【参考方案2】:

您忘记使用“@”转义 HTML 中的 C# 代码

试试:

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

更新为在 Html.Get.... 之前删除 @。

【讨论】:

嘿马丁,标签助手不要像你建议的那样使用@。无论如何,谢谢你的回答。【参考方案3】:

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

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

【讨论】:

这篇文章中的其他方法对我不起作用,但你的方法对。谢谢!【参考方案4】:

试试&lt;select asp-for="TipoLog" asp-items="Html.GetEnumSelectList&lt;ETipoLog&gt;()"&gt;&lt;/select&gt;

【讨论】:

嗨伊万,谢谢你的回答。我已经尝试过了,但我得到了同样的编译错误。

以上是关于在 ASP.NET Core MVC 中选择 ENUM Tag Helper的主要内容,如果未能解决你的问题,请参考以下文章

Azure 部署后 ASP.NET Core MVC webapp 错误

如何确定在 C# ASP.NET CORE MVC 5.0 中选择了哪个单选按钮

ASP.NET CORE MVC 选择标签助手 - 如何在不使用 ModelView 的情况下设置选定值

ASP.NET Core 3.1 MVC 如何让用户在注册时选择自己的角色?

ASP.NET Core MVC 标签助手参数中的字符串文字

ASP.NET Core 行军记 -----拔营启程