diff --git a/src/BootstrapBlazor/Components/Transfer/Transfer.razor.cs b/src/BootstrapBlazor/Components/Transfer/Transfer.razor.cs index cae2d43a3d75bcacbb40f25e58df0afc9cd5427d..9844c6ab1594f300e4f6fe5b7df5aea80b04e809 100644 --- a/src/BootstrapBlazor/Components/Transfer/Transfer.razor.cs +++ b/src/BootstrapBlazor/Components/Transfer/Transfer.razor.cs @@ -104,6 +104,32 @@ public partial class Transfer [Parameter] public string? RightPannelSearchPlaceHolderString { get; set; } + /// + /// 获得/设置 右侧面板包含的最大数量, 默认为 0 不限制 + /// + [Parameter] + public int Max { get; set; } + + /// + /// 获得/设置 设置最大值时错误消息文字 + /// + [Parameter] + [NotNull] + public string? MaxErrorMessage { get; set; } + + /// + /// 获得/设置 右侧面板包含的最大数量,默认为 0 不限制 + /// + [Parameter] + public int Min { get; set; } + + /// + /// 获得/设置 设置最小值时错误消息文字 + /// + [Parameter] + [NotNull] + public string? MinErrorMessage { get; set; } + /// /// 获得/设置 数据样式回调方法 默认为 null /// @@ -154,6 +180,8 @@ public partial class Transfer LeftPanelText ??= Localizer[nameof(LeftPanelText)]; RightPanelText ??= Localizer[nameof(RightPanelText)]; + MinErrorMessage ??= Localizer[nameof(MinErrorMessage)]; + MaxErrorMessage ??= Localizer[nameof(MaxErrorMessage)]; var list = CurrentValueAsString.Split(',', StringSplitOptions.RemoveEmptyEntries); LeftItems.Clear(); @@ -174,6 +202,16 @@ public partial class Transfer RightItems.Add(item); } } + + if (Min > 0) + { + Rules.Add(new MinValidator() { Value = Min, ErrorMessage = MinErrorMessage }); + } + if (Max > 0) + { + Rules.Add(new MaxValidator() { Value = Max, ErrorMessage = MaxErrorMessage }); + } + } /// @@ -202,6 +240,19 @@ public partial class Transfer await OnSelectedItemsChanged(isLeft ? target : source); } } + + + if (Min > 0 || Max > 0) + { + var validationContext = new ValidationContext(Value!) { MemberName = FieldIdentifier?.FieldName }; + var validationResults = new List(); + + await ValidatePropertyAsync(RightItems, validationContext, validationResults); + ToggleMessage(validationResults, true); + } + + StateHasChanged(); + } /// diff --git a/src/BootstrapBlazor/Locales/zh.json b/src/BootstrapBlazor/Locales/zh.json index fd08ecffd4e60c64cdcdd102fb77c18f8c1d1d89..9e652ff90932c3146dbdd595cfe05c9d7f7d9644 100644 --- a/src/BootstrapBlazor/Locales/zh.json +++ b/src/BootstrapBlazor/Locales/zh.json @@ -283,7 +283,9 @@ }, "BootstrapBlazor.Components.Transfer": { "LeftPanelText": "全部", - "RightPanelText": "已选" + "RightPanelText": "已选", + "MinErrorMessage": "最少请选择{0}项", + "MaxErrorMessage": "最多可选择{0}项" }, "BootstrapBlazor.Components.TransferPanel": { "SearchPlaceHolderString": "请输入 ...",