asp.net-mvc - 在 ASP.NET Core MVC 中选择 ENUM 标记帮助器

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

我需要一些有关使用标记帮助程序的 ENUM 下拉列表的帮助。

我发现很多将模型绑定(bind)到 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 上使用了它,这就足够了。

下拉菜单

<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

我还尝试将模型列表绑定(bind)到 Controller 上的 ViewBag,如​​下所示:

Controller :

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>

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

最佳答案

终于找到解决办法了!

这看起来并不明显,但这样我就没有编译错误!我从 Ivan 得到的答案并没有错误,但有必要在 View 上导入 CRM.Model,如下所示:

@using CRM.Model;

所以,我的下拉菜单:

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

enter image description here

你可以看到,Visual Studio 告诉我这是不必要的,将其绘制为灰色,但如果没有的话,我会收到编译错误。我希望我能帮助别人。

关于asp.net-mvc - 在 ASP.NET Core MVC 中选择 ENUM 标记帮助器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44761915/

相关文章:

c# - 创建通用扩展方法来获取值的显示名称属性字符串列表

MATLAB 枚举 switch 语句总是进入第一种情况

asp.net-mvc - Visual Studio 2010 Express 是用于 MVC 开发的吗?

Angular-Datatables 支持服务器分页

ajax - JQuery Ajax 和将多个复杂对象发布到 asp.net MVC Controller

c# - 通过 POST、PUT 方法返回 400 Bad Request,但 GET 工作正常

visual-studio - 从 Visual Studio 2019 将 ASP.NET Core 3.1 站点发布到 Azure 时出错

c++ - 使用枚举的奇怪 SIGSEGV(段错误)

asp.net-mvc - 长距离 OSM 路由,如何处理所有这些数据?

c# - 使用上下文或创建方法在 Controller 中获取数据?