将枚举传递给 Blazor 组件的参数



我有一个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"的强制转换无效。

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

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

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

<TargerComponent ParameterThatNeesdEnum="@YourTypedVariable">

相关内容

  • 没有找到相关文章

最新更新