c# - 包含枚举值的 InputSelect 占位符
问题描述
我有一个InputSelect
基于Enum
类型显示各种选项的选项,例如
<InputSelect @bind-Value=m_ProjectExtended.EstimateType class="form-control form-control-sm">
@foreach (var type in @GetEnumValues<EstimateType>())
{
<option value="@type.Value">@type.Key</option>
}
</InputSelect>
public Dictionary<string, int> GetEnumValues<T>()
{
Dictionary<string, int> values = new Dictionary<string, int>();
foreach (var enumValue in Enum.GetValues(typeof(T)))
{
values.Add(enumValue.GetDisplayAttribute(), (int)enumValue);
}
return values;
}
我缺少的是能够在默认情况下选择占位符选项(即:例如,在创建新记录时选择“选择选项”),并且能够InputSelect
从组件的代码中重置为这个占位符。
我在 Angular 中执行此操作的方式是添加值为 -1 的占位符选项,将绑定字段设置为该值,这可以解决问题。
问题是我在实际的 C# 枚举中没有值 -1 并且真的不想要一个。
有什么办法可以做到这一点?
解决方案
您不需要绑定该值,因为您没有强制进行特定选择。相反,将其设置在@onchange
Title 选项不需要值,因为它永远不会被onchange
. 我喜欢让我的值为SelectedItem
空,因为这适用于所有可枚举(列表、队列等,而不仅仅是枚举)。将所选项目设置为 null 会自动重置标题选项。
<button @onclick="()=> SelectedType=null">Clear</button>
<select @onchange="args => SelectedType = (EstimateType)Enum.Parse(typeof(EstimateType), args.Value.ToString())">
@if (SelectedType is null)
{
<option selected disabled>Choose an Estimate Type</option>
}
@foreach (var item in Enum.GetNames(typeof(EstimateType)))
{
<option value="@item">@item</option>
}
</select>
@if(SelectedType is not null)
{
<div>Selected Estimate Type: @SelectedType.ToString()</div>
}
@code {
enum EstimateType { Labor, Materials, Drafting, Legal }
EstimateType? SelectedType { get; set; }
}
推荐阅读
- excel - Excel VBA,用于根据用户选择设置特定单元格值
- scala - SCIO 用 scio parquet 读取 parquet 文件,未找到生成的案例类
- excel - 将数据透视表添加到顺序工作表
- c - 如何在 scanf 函数中使用编辑转换代码来停止在特定单词处扫描字符串
- pandas - 使用我有条件标记的值创建新列
- xamarin - Xamarin 使用框架创建圆形图像
- c - 如何忽略所有小于第一个参数值的输入,然后传递给数组/函数?(C语言)
- arrays - Ruby 将数组拆分为仅包含不同值的子数组
- c++ - C++ CTRL+C 处理程序具有未定义的行为?
- powerapps - PowerApp 图像到文本使用