GetEnumSelectList 在 RazorPages 中生成一个空的组合框

Pat*_*fer 1 asp.net razor

我用 ASP.NET Core 开始了一个新项目,但遇到了以下问题:

当我尝试从枚举中填充选择列表时,我只得到一个空的组合框......我使用 .NET Core 2.0 和 Razor Pages。

我已经用我想要开始工作的部分的裸骨重建了我在实际项目中的代码。

枚举:

    namespace EnumTest2
{
    public enum SomeEnum
    {
        Test1,
        Test2,
        Test3
    }
}
Run Code Online (Sandbox Code Playgroud)

班上:

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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

页面模型:

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()
        {

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

风景:

@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>
Run Code Online (Sandbox Code Playgroud)

生成的 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>
Run Code Online (Sandbox Code Playgroud)

根据到目前为止我发现的关于 SO 的教程和答案,这是正确的做事方式,它应该生成枚举值作为选择的选项,但正如您所看到的,它生成一个空的选择标签。

Pat*_*fer 6

我想到了。您不能将 select 元素作为空元素关闭

<select asp-for="TheClass.TheEnum" asp-items="Html.GetEnumSelectList<SomeEnum>()" />
Run Code Online (Sandbox Code Playgroud)

不起作用

<select asp-for="TheClass.TheEnum" asp-items="Html.GetEnumSelectList<SomeEnum>()"></select>
Run Code Online (Sandbox Code Playgroud)

行得通

我想一旦标签为空,标签助手就不能再让它“空”了