Select ASP.NET 核心 MVC 中的 ENUM 标签助手
Select ENUM Tag Helper in ASP.NET Core MVC
我需要一些关于使用 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 上使用它就足够了。
下拉列表
<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>
我尝试了不同的方法,但无法在编辑操作中使用数据库项 select 设置下拉列表。我这样试过:
<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>
部分有效,下拉列表列出了项目,但没有select从数据库中输入正确的项目。它将列表中的第一个显示为 selected.
尝试<select asp-for="TipoLog" asp-items="Html.GetEnumSelectList<ETipoLog>()"></select>
您忘记使用“@”转义 HTML 中的 C# 代码
尝试:
<select asp-for="TipoLog" asp-items="Html.GetEnumSelectList<TipoLog>()"></select>
已更新以删除 Html.Get 之前的 @...
终于找到解决办法了!
看起来不是很明显,但是这样我就没有编译错误了!!!我从 Ivan 那里得到的答案并没有错,但是有必要在视图中导入 CRM.Model
,例如:
@using CRM.Model;
所以,我的下拉列表:
<select asp-for="TipoLog" asp-items="Html.GetEnumSelectList<ETipoLog>()" class="form-control"></select>
你可以看到,Visual Studio告诉我这是不必要的,把它涂成灰色,但没有那个,我得到编译错误。我希望我能帮助到别人。
这对我有用,不需要 using 声明。
<select asp-for="ClientFeeStage"
asp-items="@Html.GetEnumSelectList(typeof(AT.Domain.Entities.ClientFeeStage))"
class="form-control">
我需要一些关于使用 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 上使用它就足够了。
下拉列表
<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>
我尝试了不同的方法,但无法在编辑操作中使用数据库项 select 设置下拉列表。我这样试过:
<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>
部分有效,下拉列表列出了项目,但没有select从数据库中输入正确的项目。它将列表中的第一个显示为 selected.
尝试<select asp-for="TipoLog" asp-items="Html.GetEnumSelectList<ETipoLog>()"></select>
您忘记使用“@”转义 HTML 中的 C# 代码
尝试:
<select asp-for="TipoLog" asp-items="Html.GetEnumSelectList<TipoLog>()"></select>
已更新以删除 Html.Get 之前的 @...
终于找到解决办法了!
看起来不是很明显,但是这样我就没有编译错误了!!!我从 Ivan 那里得到的答案并没有错,但是有必要在视图中导入 CRM.Model
,例如:
@using CRM.Model;
所以,我的下拉列表:
<select asp-for="TipoLog" asp-items="Html.GetEnumSelectList<ETipoLog>()" class="form-control"></select>
你可以看到,Visual Studio告诉我这是不必要的,把它涂成灰色,但没有那个,我得到编译错误。我希望我能帮助到别人。
这对我有用,不需要 using 声明。
<select asp-for="ClientFeeStage"
asp-items="@Html.GetEnumSelectList(typeof(AT.Domain.Entities.ClientFeeStage))"
class="form-control">