You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法更新Question实体中的枚举属性问题排查

问题:更新Question实体枚举属性时遇标记助手错误

错误提示:

标记助手‘option’不得在元素的属性声明区域包含C#代码。

相关代码

Question.cs

using quiz.Entities;
using System.ComponentModel;

public class Question
{
    public Guid Id { get; set; }

    [DisplayName("Question's Text")]
    public string QuestionText { get; set; }

    public enum DifficultyLevel
    {
        Easy,
        Medium,
        Hard
    }

    [DisplayName("Zorluk Derecesi")]
    public DifficultyLevel Difficulty { get; set; }

    [DisplayName("Şık A")]
    public string AnswerA { get; set; }

    [DisplayName("Şık B")]
    public string AnswerB { get; set; }

    [DisplayName("Şık C")]
    public string AnswerC { get; set; }

    [DisplayName("Şık D")]
    public string AnswerD { get; set; }

    [DisplayName("Doğru Şık")]
    public char CorrectAnswer { get; set; }

    [DisplayName("Movie Name (MovieId)")]
    public Guid MovieId { get; set; }

    public virtual Movie? Movie { get; set; }
}

Edit.cshtml

<div class="form-group mb-4">
 <label asp-for="Difficulty" class="form-label font-weight-bold">Zorluk Derecesi</label>
 <select asp-for="Difficulty" class="form-control bg-secondary text-light border-0 shadow-sm">
     <option value="">Seçiniz</option>
     @foreach (var level in Enum.GetValues(typeof(Question.DifficultyLevel)))
     {
         <option value="@level.ToString()" @(Model.Difficulty == level ? "selected" : "")>@level</option>
     }
 </select>
 <span asp-validation-for="Difficulty" class="text-danger"></span>
解决方案

错误根源是ASP.NET Core的option标记助手不允许在属性声明区域直接嵌入C#代码(此处的三元表达式属于属性内的C#逻辑),提供两种解决办法:

方法一:使用枚举绑定标记助手(推荐)

ASP.NET Core内置了枚举下拉框的快捷绑定方式,无需手动循环,自动处理选中状态:

<div class="form-group mb-4">
 <label asp-for="Difficulty" class="form-label font-weight-bold">Zorluk Derecesi</label>
 <select asp-for="Difficulty" asp-items="Html.GetEnumSelectList<Question.DifficultyLevel>()" class="form-control bg-secondary text-light border-0 shadow-sm">
     <option value="">Seçiniz</option>
 </select>
 <span asp-validation-for="Difficulty" class="text-danger"></span>
</div>

Html.GetEnumSelectList会自动生成枚举所有选项,并匹配当前Model.Difficulty的值设置selected属性。

方法二:手动循环时拆分逻辑

如果坚持手动构建选项,可将选中状态提前赋值给变量,避免在属性内直接写C#代码:

<div class="form-group mb-4">
 <label asp-for="Difficulty" class="form-label font-weight-bold">Zorluk Derecesi</label>
 <select asp-for="Difficulty" class="form-control bg-secondary text-light border-0 shadow-sm">
     <option value="">Seçiniz</option>
     @foreach (var level in Enum.GetValues(typeof(Question.DifficultyLevel)))
     {
         string selected = Model.Difficulty == level ? "selected" : "";
         <option value="@level.ToString()" @selected>@level</option>
     }
 </select>
 <span asp-validation-for="Difficulty" class="text-danger"></span>
</div>

内容的提问来源于stack exchange,提问作者onurkaygn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 16:07:38