From 4a28824d7a1f75fefbfeca4de99cae51105572dd Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Fri, 26 Dec 2025 12:43:39 +0800 Subject: [PATCH 1/7] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E7=A9=BA?= =?UTF-8?q?=E9=9B=86=E5=90=88=E9=AA=8C=E8=AF=81=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Upload/CardUpload.razor.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/BootstrapBlazor/Components/Upload/CardUpload.razor.cs b/src/BootstrapBlazor/Components/Upload/CardUpload.razor.cs index a1f88f7cfe1..2e23c637b05 100644 --- a/src/BootstrapBlazor/Components/Upload/CardUpload.razor.cs +++ b/src/BootstrapBlazor/Components/Upload/CardUpload.razor.cs @@ -35,6 +35,7 @@ public partial class CardUpload private string? GetDeleteButtonDisabledString(UploadFile item) => (!IsDisabled && item.Uploaded) ? null : "disabled"; private string? CardItemClass => CssBuilder.Default("upload-item upload-item-plus btn-browser upload-drop-body") + .AddClass(ValidCss, Files.Count == 0) .AddClass("disabled", IsDisabled) .Build(); From 1589a8e02075b8993d0745f99a49e9155b1184dd Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Fri, 26 Dec 2025 13:39:08 +0800 Subject: [PATCH 2/7] =?UTF-8?q?refactor:=20=E6=9B=B4=E6=AD=A3=E5=8D=95?= =?UTF-8?q?=E8=AF=8D=E6=8B=BC=E5=86=99=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Upload/AvatarUpload.razor.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/BootstrapBlazor/Components/Upload/AvatarUpload.razor.cs b/src/BootstrapBlazor/Components/Upload/AvatarUpload.razor.cs index 9cd596900b5..bcb5313ba89 100644 --- a/src/BootstrapBlazor/Components/Upload/AvatarUpload.razor.cs +++ b/src/BootstrapBlazor/Components/Upload/AvatarUpload.razor.cs @@ -187,19 +187,19 @@ public override async Task ToggleMessage(IReadOnlyCollection r ValidateModule ??= await LoadValidateModule(); - var invalidItems = IsInValiadOnAddItem + var invalidItems = IsInValidOnAddItem ? [new { Id = AddId, _results.First().ErrorMessage }] : _results.Select(i => new { Id = i.MemberNames.FirstOrDefault(), i.ErrorMessage }).ToList(); - var items = IsInValiadOnAddItem + var items = IsInValidOnAddItem ? [AddId] : Files.Select(i => i.ValidateId).ToList(); - var addId = IsInValiadOnAddItem ? null : AddId; + var addId = IsInValidOnAddItem ? null : AddId; await ValidateModule.InvokeVoidAsync("executeUpload", items, invalidItems, addId); } - private bool IsInValiadOnAddItem => Files.Count == 0 && _results.Count > 0; + private bool IsInValidOnAddItem => Files.Count == 0 && _results.Count > 0; /// /// @@ -238,7 +238,7 @@ protected override async ValueTask DisposeAsync(bool disposing) if (ValidateModule != null) { - var items = IsInValiadOnAddItem + var items = IsInValidOnAddItem ? [AddId] : Files.Select(i => i.ValidateId).ToList(); From b691fc6256746ee86d604eafa4d858b4e99d83f7 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Fri, 26 Dec 2025 13:40:46 +0800 Subject: [PATCH 3/7] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Upload/CardUpload.razor | 4 +- .../Components/Upload/CardUpload.razor.cs | 50 ++++++++++++++++++- 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/src/BootstrapBlazor/Components/Upload/CardUpload.razor b/src/BootstrapBlazor/Components/Upload/CardUpload.razor index 5cb3f09d14d..1cd0f01ca64 100644 --- a/src/BootstrapBlazor/Components/Upload/CardUpload.razor +++ b/src/BootstrapBlazor/Components/Upload/CardUpload.razor @@ -14,7 +14,7 @@ } @foreach (var item in Files) { -
+
@if (IconTemplate != null) { @@ -98,7 +98,7 @@ @code { RenderFragment RenderAdd => - @
+ @
; } diff --git a/src/BootstrapBlazor/Components/Upload/CardUpload.razor.cs b/src/BootstrapBlazor/Components/Upload/CardUpload.razor.cs index 2e23c637b05..5a3458799cc 100644 --- a/src/BootstrapBlazor/Components/Upload/CardUpload.razor.cs +++ b/src/BootstrapBlazor/Components/Upload/CardUpload.razor.cs @@ -18,6 +18,7 @@ public partial class CardUpload .AddClass("is-valid", item is { Uploaded: true, Code: 0 }) .AddClass("is-invalid", item.Code != 0) .Build(); + private string? ItemClassString => CssBuilder.Default("upload-item") .AddClass("disabled", CanUpload() == false) .Build(); @@ -35,7 +36,6 @@ public partial class CardUpload private string? GetDeleteButtonDisabledString(UploadFile item) => (!IsDisabled && item.Uploaded) ? null : "disabled"; private string? CardItemClass => CssBuilder.Default("upload-item upload-item-plus btn-browser upload-drop-body") - .AddClass(ValidCss, Files.Count == 0) .AddClass("disabled", IsDisabled) .Build(); @@ -163,6 +163,54 @@ protected override async Task TriggerOnChanged(UploadFile file) await base.TriggerOnChanged(file); } + private IReadOnlyCollection _results = []; + + /// + /// + /// + /// + public override async Task ToggleMessage(IReadOnlyCollection results) + { + _results = results; + IsValid = results.Count == 0; + + ValidateModule ??= await LoadValidateModule(); + + var invalidItems = IsInValidOnAddItem + ? [new { Id = AddId, _results.First().ErrorMessage }] + : _results.Select(i => new { Id = i.MemberNames.FirstOrDefault(), i.ErrorMessage }).ToList(); + + var items = IsInValidOnAddItem + ? [AddId] + : Files.Select(i => i.ValidateId).ToList(); + + var addId = IsInValidOnAddItem ? null : AddId; + await ValidateModule.InvokeVoidAsync("executeUpload", items, invalidItems, addId); + } + + private bool IsInValidOnAddItem => Files.Count == 0 && _results.Count > 0; + + /// + /// + /// + /// + protected override ValueTask ShowValidResult() => ValueTask.CompletedTask; + + /// + /// + /// + /// + /// + protected override async ValueTask RemoveValidResult(string? validateId = null) + { + if (!string.IsNullOrEmpty(validateId)) + { + await base.RemoveValidResult(validateId); + } + } + + private string? AddId => $"{Id}_new"; + private async Task OnCardFileDelete(UploadFile item) { await OnFileDelete(item); From 20fa20c273dce6fe98c98c2994c06a25755f77a6 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Fri, 26 Dec 2025 13:58:43 +0800 Subject: [PATCH 4/7] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=A9=BA=E9=9B=86?= =?UTF-8?q?=E5=90=88=E4=B8=8D=E6=8A=A5=E9=94=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/ValidateForm/ValidateForm.razor.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Components/ValidateForm/ValidateForm.razor.cs b/src/BootstrapBlazor/Components/ValidateForm/ValidateForm.razor.cs index cb701b8f477..e277287199f 100644 --- a/src/BootstrapBlazor/Components/ValidateForm/ValidateForm.razor.cs +++ b/src/BootstrapBlazor/Components/ValidateForm/ValidateForm.razor.cs @@ -1,4 +1,4 @@ -// Licensed to the .NET Foundation under one or more agreements. +// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the Apache 2.0 License // See the LICENSE file in the project root for more information. // Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone @@ -508,6 +508,7 @@ private async Task ValidateAsync(IValidateComponent validator, ValidationContext else { // 未选择文件 + propertyValue = null; ValidateDataAnnotations(propertyValue, context, messages, pi); } From dbecb66cbe4b9b1acea186857821e0b3a21085c3 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Fri, 26 Dec 2025 13:59:32 +0800 Subject: [PATCH 5/7] =?UTF-8?q?refactor:=20=E5=A2=9E=E5=8A=A0=E5=AF=B9=20U?= =?UTF-8?q?ploadFile=20=E9=9B=86=E5=90=88=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Upload/UploadBase.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Components/Upload/UploadBase.cs b/src/BootstrapBlazor/Components/Upload/UploadBase.cs index 7e5c3a99ebd..ffc59032989 100644 --- a/src/BootstrapBlazor/Components/Upload/UploadBase.cs +++ b/src/BootstrapBlazor/Components/Upload/UploadBase.cs @@ -190,7 +190,11 @@ protected async Task OnFileChange(InputFileChangeEventArgs args) await OnAllFileUploaded(items); } - if (ValueType.IsAssignableTo(typeof(IEnumerable))) + if (ValueType.IsAssignableTo(typeof(IEnumerable))) + { + CurrentValue = (TValue)(object)items; + } + else if (ValueType.IsAssignableTo(typeof(IEnumerable))) { CurrentValue = (TValue)(object)items.Select(f => f.File).ToList(); } From 9c86d53c98a7f1b07a83f09ddbb427d45fbcffb5 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Fri, 26 Dec 2025 13:59:41 +0800 Subject: [PATCH 6/7] =?UTF-8?q?style:=20=E6=9B=B4=E6=96=B0=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Upload/InputUpload.razor.scss | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/BootstrapBlazor/Components/Upload/InputUpload.razor.scss b/src/BootstrapBlazor/Components/Upload/InputUpload.razor.scss index 45f7b40d418..b30b2586341 100644 --- a/src/BootstrapBlazor/Components/Upload/InputUpload.razor.scss +++ b/src/BootstrapBlazor/Components/Upload/InputUpload.razor.scss @@ -119,7 +119,7 @@ .upload .upload-body.is-avatar .upload-item:not(.is-form):not(.is-valid):not(.is-invalid):hover, .upload .upload-body.is-avatar .upload-item:not(.is-form).is-valid, .upload .upload-body.is-card .upload-item.is-valid, -.upload .upload-body.is-card .upload-item:not(.disabled):hover { +.upload .upload-body.is-card .upload-item:not(.disabled):not(.is-valid):not(.is-invalid):hover { border-color: var(--bb-upload-body-list-item-hover-color); } @@ -194,10 +194,14 @@ display: block; } -.upload .upload-body.is-card .is-invalid .upload-item-body { +.upload .upload-body.is-card .upload-item.is-invalid { border-color: var(--bs-danger); } +.upload .upload-body.is-card .upload-item.is-valid { + border-color: var(--bs-success); +} + .upload .upload-body.is-card .upload-item-body { border-radius: var(--bs-border-radius); width: var(--bb-upload-card-item-width); From 0d1f4309e639d038ef8c5c739817ce8c36519846 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Fri, 26 Dec 2025 14:05:47 +0800 Subject: [PATCH 7/7] chore: bump version 10.1.5-beta04 --- src/BootstrapBlazor/BootstrapBlazor.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj index 653674e9db2..5ad87e0df46 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,7 +1,7 @@  - 10.1.5-beta03 + 10.1.5-beta04