diff --git a/src/BootstrapBlazor/Components/Cascader/Cascader.razor b/src/BootstrapBlazor/Components/Cascader/Cascader.razor
index c6dd5496ef4..a020a67c098 100644
--- a/src/BootstrapBlazor/Components/Cascader/Cascader.razor
+++ b/src/BootstrapBlazor/Components/Cascader/Cascader.razor
@@ -4,10 +4,10 @@
@if (IsShowLabel)
{
-
+
}
-
+
diff --git a/src/BootstrapBlazor/Components/Cascader/Cascader.razor.cs b/src/BootstrapBlazor/Components/Cascader/Cascader.razor.cs
index 7894d007eb2..dba72786fb3 100644
--- a/src/BootstrapBlazor/Components/Cascader/Cascader.razor.cs
+++ b/src/BootstrapBlazor/Components/Cascader/Cascader.razor.cs
@@ -45,9 +45,7 @@ public partial class Cascader
///
[Parameter]
[NotNull]
-#if NET6_0_OR_GREATER
[EditorRequired]
-#endif
public IEnumerable? Items { get; set; }
///
@@ -80,6 +78,12 @@ public partial class Cascader
[Parameter]
public string? SubMenuIcon { get; set; }
+ ///
+ /// 获得/设置 失去焦点回调方法 默认 null
+ ///
+ [Parameter]
+ public Func? OnBlurAsync { get; set; }
+
[Inject]
[NotNull]
private IStringLocalizer>? Localizer { get; set; }
@@ -115,6 +119,17 @@ protected override void OnParametersSet()
}
}
+ ///
+ /// 失去焦点时回调方法
+ ///
+ private async Task OnBlur()
+ {
+ if (OnBlurAsync != null)
+ {
+ await OnBlurAsync(Value);
+ }
+ }
+
///
/// 设置默认选中
///
diff --git a/test/UnitTest/Components/CascaderTest.cs b/test/UnitTest/Components/CascaderTest.cs
index 0158fa5534a..ae6a4ee51b1 100644
--- a/test/UnitTest/Components/CascaderTest.cs
+++ b/test/UnitTest/Components/CascaderTest.cs
@@ -218,6 +218,29 @@ public async Task ShowFullLevels_Ok()
Assert.Equal("Test1/Test11", cut.Instance.MockDisplayText);
}
+ [Fact]
+ public async Task OnBlurAsync_Ok()
+ {
+ var value = "";
+ var items = new List()
+ {
+ new() { Text = "test1", Value = "1" }
+ };
+ var cut = Context.RenderComponent>(pb =>
+ {
+ pb.Add(a => a.Items, items);
+ pb.Add(a => a.Value, "1");
+ pb.Add(a => a.OnBlurAsync, v =>
+ {
+ value = v;
+ return Task.CompletedTask;
+ });
+ });
+ var input = cut.Find("input");
+ await cut.InvokeAsync(() => input.Blur());
+ Assert.Equal("1", value);
+ }
+
class MockCascader : Cascader
{
public string? MockDisplayText => DisplayTextString;