【问题标题】:Pass enum to Blazor component's parameter将枚举传递给 Blazor 组件的参数
【发布时间】:2022-02-20 03:28:22
【问题描述】:

我有一个需要枚举作为参数的 Razor 组件。我读过您应该使用@typeparam 来传递泛型类型,但是当我尝试使用变量名EnumType 时,每次输入EnumType 时都会出现以下错误

找不到类型或命名空间名称EnumType(您是否缺少 using 指令或程序集引用?

代码大致如下:

@typeparam TEnum


@foreach (EnumType flag in Enum.GetValues(typeof(EnumType)))
    {
        if (((EnumType)Old).HasFlag(flag))
        {
            if (((EnumType)New).HasFlag(flag))
            {
                <li>@EnumExtensions.GetEnumDisplayName(flag)</li>
            }
            else
            {
                <li class="deleted-li">@EnumExtensions.GetEnumDisplayName(flag)</li>
            }

        }
    }

@code{
    [Parameter]
    public TEnum EnumType { get; set; }
    //          ^ only time I dont get the error

    [Parameter]
    public int Old { get; set; }

    [Parameter]
    public int New { get; set; }
}

编辑:我休息了一下,然后回来查看我的代码,发现这毫无意义。此后我将其更新为:

@typeparam TEnum

@foreach (Enum flag in Enum.GetValues(typeof(TEnum)))
    {
        if (((Enum)Convert.ChangeType(Old, typeof(TEnum))).HasFlag(flag))
        {
            if (((Enum)Convert.ChangeType(New, typeof(TEnum))).HasFlag(flag))
            {
                <li>@EnumExtensions.GetEnumDisplayName(flag)</li>
            }
            else
            {
                <li class="deleted-li">
                    @EnumExtensions.GetEnumDisplayName(flag) 
                 </li>
            }

        }
    }
@code{
    [Parameter]
    public int Old { get; set; }
    [Parameter]
    public int New { get; set; }
}

我现在在((Enum)Convert.ChangeType(Old, typeof(TEnum)) 上收到错误消息:

从“System.Int32”到“DataAccessLibrary.Enums.TimelineinfoEnums+MisconductEnum”的无效转换。

【问题讨论】:

  • public partial class YourComponent&lt;TEnum&gt; : ComponentBase where TEnum : Enum试试后面的代码
  • ((TEnum)Enum.ToObject(typeof(TEnum), Old))
  • 谢谢布赖恩,Enum.ToObjectworks。我必须将其转换为Enum 而不是TEnum,因为TEnum 不包含.HasFlag() 的定义
  • 使用代码背后的方法,它会因为它有一个枚举约束。

标签: generics enums blazor blazor-server-side


【解决方案1】:

您需要在生命周期OnInitialized(){ ... }OnInitializedAsync(){ ... } 中为对象EnumType 设置值。

参考文档:https://docs.microsoft.com/en-us/aspnet/core/blazor/components/lifecycle?view=aspnetcore-3.1

【讨论】:

  • 是的,如果我要正确使用该变量,我将需要这样做,但由于我只需要类型,而不是变量,因此我从不需要 EnumType 开始。我更新了问题,以更好地反映我应该做什么以及我现在面临的问题。
【解决方案2】:

我刚遇到这个问题。在您的代码中声明您需要的类型(枚举)的变量,然后

<TargerComponent ParameterThatNeesdEnum="@YourTypedVariable">

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-18
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2011-12-04
    相关资源
    最近更新 更多