我开始使用ASP.NET Core开发一个新项目并遇到了以下问题:
当我尝试从枚举中填充选择列表时,我只得到一个空的组合框...我正在使用带有Razor Pages的.NET Core 2.0。
我已经在我的实际项目中重构了我想要开始工作的部分的骨架。
枚举:
namespace EnumTest2
{
public enum SomeEnum
{
Test1,
Test2,
Test3
}
}
班级:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
namespace EnumTest2
{
public class SomeClass
{
[Required]
public SomeEnum TheEnum { get; set; }
}
}
页面模型:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace EnumTest2.Pages
{
public class IndexModel : PageModel
{
[BindProperty]
public SomeClass TheClass { get; set; }
public void OnGet()
{
}
public void OnPost()
{
}
}
}
观点:
@page
@using EnumTest2
@model EnumTest2.Pages.IndexModel
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
<h2>Index</h2>
<form method="post">
<select asp-for="TheClass.TheEnum" asp-items="Html.GetEnumSelectList<SomeEnum>()" />
</form>
生成的HTML:
<h2>Index</h2>
<form method="post">
<select data-val="true" data-val-required="The TheEnum field is required." id="TheClass_TheEnum" name="TheClass.TheEnum" />
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8KHMPQ1QRaBJumCjTcSE3GQtDZZLAoWv1Pcob_bJ71FI-ccIP1AnWuJ2WHdjF6qfWZdPTDNd9RybY0NvzXQ-uMslDfltFcGdUfYDOTzK8KB8qTodZ2BO3rx1c3WqiF_W2pKyrI30QdWzJW1Lvuq5-bI" /></form>
根据迄今为止我发现的SO的教程和答案,这是正确的做法,它应该生成枚举值作为select的选项,但正如你所看到的那样,它会生成一个空的select标签。 / p>
答案 0 :(得分:2)
我明白了。您不能将select元素关闭为空元素
<select asp-for="TheClass.TheEnum" asp-items="Html.GetEnumSelectList<SomeEnum>()" />
不起作用
<select asp-for="TheClass.TheEnum" asp-items="Html.GetEnumSelectList<SomeEnum>()"></select>
工作
我想一旦标签为空,标签助手就不能再让它“空虚”了