diff --git a/src/BootstrapBlazor.Server/Components/Samples/UploadCards.razor b/src/BootstrapBlazor.Server/Components/Samples/UploadCards.razor
index bcfdac4aee3..a6f5e53bfb2 100644
--- a/src/BootstrapBlazor.Server/Components/Samples/UploadCards.razor
+++ b/src/BootstrapBlazor.Server/Components/Samples/UploadCards.razor
@@ -74,7 +74,7 @@
diff --git a/src/BootstrapBlazor.Server/Components/Samples/UploadInputs.razor b/src/BootstrapBlazor.Server/Components/Samples/UploadInputs.razor
index d5fc395fd2d..4b313756fa7 100644
--- a/src/BootstrapBlazor.Server/Components/Samples/UploadInputs.razor
+++ b/src/BootstrapBlazor.Server/Components/Samples/UploadInputs.razor
@@ -15,7 +15,7 @@
Name="Normal">
-
diff --git a/src/BootstrapBlazor/Components/Button/PopConfirmButton.razor b/src/BootstrapBlazor/Components/Button/PopConfirmButton.razor
index be939936c7a..2c823b1ac3c 100644
--- a/src/BootstrapBlazor/Components/Button/PopConfirmButton.razor
+++ b/src/BootstrapBlazor/Components/Button/PopConfirmButton.razor
@@ -1,4 +1,4 @@
-@namespace BootstrapBlazor.Components
+@namespace BootstrapBlazor.Components
@inherits PopConfirmButtonBase
@if (_renderTooltip)
@@ -35,7 +35,8 @@ else
;
diff --git a/src/BootstrapBlazor/Components/Upload/CardUpload.razor b/src/BootstrapBlazor/Components/Upload/CardUpload.razor
index beb494b22f0..d8d9cece1da 100644
--- a/src/BootstrapBlazor/Components/Upload/CardUpload.razor
+++ b/src/BootstrapBlazor/Components/Upload/CardUpload.razor
@@ -67,7 +67,7 @@
@if (ShowDeleteButton)
{
- @if (ShowDeleteConfirmButton)
+ @if (IsConfirmDelete)
{
+ OnConfirm="@(()=> OnCardFileDelete(item))" />
}
else
{
}
diff --git a/src/BootstrapBlazor/Components/Upload/CardUpload.razor.cs b/src/BootstrapBlazor/Components/Upload/CardUpload.razor.cs
index 2255ac61da9..e464c682e01 100644
--- a/src/BootstrapBlazor/Components/Upload/CardUpload.razor.cs
+++ b/src/BootstrapBlazor/Components/Upload/CardUpload.razor.cs
@@ -165,7 +165,16 @@ public partial class CardUpload
/// Gets or sets whether to display a confirmation dialog before deletion. Only takes effect when the ShowDeleteButton property is true
///
[Parameter]
- public bool ShowDeleteConfirmButton { get; set; }
+ [Obsolete("已弃用,请使用 IsConfirmDelete 参数。Deprecated, please use the IsConfirmDelete parameter")]
+ [ExcludeFromCodeCoverage]
+ public bool ShowDeleteConfirmButton { get => IsConfirmDelete; set => IsConfirmDelete = value; }
+
+ ///
+ /// 获得/设置 删除按钮否显示确认对话框,依赖 ShowDeleteButton 属性为 true 时有效
+ /// Gets or sets whether to display a confirmation dialog before deletion. Only takes effect when the ShowDeleteButton property is true
+ ///
+ [Parameter]
+ public bool IsConfirmDelete { get; set; }
///
/// 获得/设置 删除确认弹窗中确认按钮颜色,默认 Color.Danger
diff --git a/src/BootstrapBlazor/Components/Upload/InputUpload.razor b/src/BootstrapBlazor/Components/Upload/InputUpload.razor
index 50798e49d2a..55e6af9d8fa 100644
--- a/src/BootstrapBlazor/Components/Upload/InputUpload.razor
+++ b/src/BootstrapBlazor/Components/Upload/InputUpload.razor
@@ -1,4 +1,4 @@
-@namespace BootstrapBlazor.Components
+@namespace BootstrapBlazor.Components
@typeparam TValue
@inherits UploadBase
@@ -12,9 +12,28 @@
placeholder="@PlaceHolder" value="@CurrentValueAsString" />
@if (ShowDeleteButton)
{
-
+ @if (IsConfirmDelete)
+ {
+
+ }
+ else
+ {
+
+ }
+
}
diff --git a/src/BootstrapBlazor/Components/Upload/InputUpload.razor.cs b/src/BootstrapBlazor/Components/Upload/InputUpload.razor.cs
index 1c7de760004..de114dcd61e 100644
--- a/src/BootstrapBlazor/Components/Upload/InputUpload.razor.cs
+++ b/src/BootstrapBlazor/Components/Upload/InputUpload.razor.cs
@@ -64,6 +64,48 @@ public partial class InputUpload
[Parameter]
public bool ShowDeleteButton { get; set; }
+ ///
+ /// 获得/设置 删除按钮否显示确认对话框,依赖 ShowDeleteButton 属性为 true 时有效
+ /// Gets or sets whether to display a confirmation dialog before deletion. Only takes effect when the ShowDeleteButton property is true
+ ///
+ [Parameter]
+ public bool IsConfirmDelete { get; set; }
+
+ ///
+ /// 获得/设置 删除确认弹窗中确认按钮图标,默认 null
+ /// Gets or sets the confirmation button icon in the delete confirmation dialog. Default is null
+ ///
+ [Parameter]
+ public string? DeleteConfirmButtonIcon { get; set; }
+
+ ///
+ /// 获得/设置 删除确认弹窗中确认按钮颜色,默认 Color.Danger
+ /// Gets or sets the color of the confirmation button in the delete confirmation dialog. Default is Color.Danger
+ ///
+ [Parameter]
+ public Color DeleteConfirmButtonColor { get; set; } = Color.Danger;
+
+ ///
+ /// 获得/设置 删除确认弹窗中确认按钮显示文字,默认 null
+ /// Gets or sets the confirmation button display text in the delete confirmation dialog. Default is null
+ ///
+ [Parameter]
+ public string? DeleteConfirmButtonText { get; set; }
+
+ ///
+ /// 获得/设置 删除确认弹窗中取消按钮显示文字,默认 null
+ /// Gets or sets the cancel button display text in the delete confirmation dialog. Default is null
+ ///
+ [Parameter]
+ public string? DeleteCloseButtonText { get; set; }
+
+ ///
+ /// 获得/设置 删除确认弹窗中确认文本内容,默认 null 使用资源文件中内置文字
+ /// Gets or sets the confirmation text content in the delete confirmation dialog. Default is null (uses built-in text from resource file)
+ ///
+ [Parameter]
+ public string? DeleteConfirmContent { get; set; }
+
///
/// 获得/设置 PlaceHolder 占位符文本
/// Gets or sets the placeholder text
@@ -118,6 +160,5 @@ private async Task TriggerDeleteFile()
var item = Files[index - 1];
await OnFileDelete(item);
}
- CurrentValue = default;
}
}
diff --git a/src/BootstrapBlazor/Components/Upload/UploadBase.cs b/src/BootstrapBlazor/Components/Upload/UploadBase.cs
index 4850b49e595..7d8a6feb57d 100644
--- a/src/BootstrapBlazor/Components/Upload/UploadBase.cs
+++ b/src/BootstrapBlazor/Components/Upload/UploadBase.cs
@@ -224,7 +224,7 @@ private void UpdateValue(List items)
}
else if (ValueType == typeof(IBrowserFile))
{
- CurrentValue = (TValue)items[0].File!;
+ CurrentValue = items.Count != 0 ? (TValue?)items[0].File : default;
}
else if (ValueType == typeof(string))
{
diff --git a/test/UnitTest/Components/UploadCardTest.cs b/test/UnitTest/Components/UploadCardTest.cs
index b40e06a73e2..d4d7f792298 100644
--- a/test/UnitTest/Components/UploadCardTest.cs
+++ b/test/UnitTest/Components/UploadCardTest.cs
@@ -324,7 +324,7 @@ public void ActionButtonTemplate_Ok()
}
[Fact]
- public async Task ShowConfirmButton_Ok()
+ public async Task IsConfirmDelete_Ok()
{
var cut = Context.Render>(pb =>
{
@@ -333,7 +333,7 @@ public async Task ShowConfirmButton_Ok()
new() { FileName = "test.png" }
]);
pb.Add(a => a.ShowDeleteButton, true);
- pb.Add(a => a.ShowDeleteConfirmButton, true);
+ pb.Add(a => a.IsConfirmDelete, true);
pb.Add(a => a.DeleteConfirmButtonColor, Color.Danger);
pb.Add(a => a.DeleteConfirmButtonIcon, "icon-delete");
pb.Add(a => a.DeleteConfirmContent, "content-delete");
diff --git a/test/UnitTest/Components/UploadInputTest.cs b/test/UnitTest/Components/UploadInputTest.cs
index 491dff7b939..d1b84627478 100644
--- a/test/UnitTest/Components/UploadInputTest.cs
+++ b/test/UnitTest/Components/UploadInputTest.cs
@@ -80,6 +80,36 @@ await cut.InvokeAsync(() => input.Instance.OnChange.InvokeAsync(new InputFileCha
cut.WaitForAssertion(() => cut.Contains("btn btn-delete"));
}
+ [Fact]
+ public async Task IsConfirmDelete_Ok()
+ {
+ var file = new MockBrowserFile();
+ var cut = Context.Render>(pb =>
+ {
+ pb.Add(a => a.ShowDeleteButton, true);
+ pb.Add(a => a.IsConfirmDelete, true);
+ pb.Add(a => a.DeleteConfirmButtonColor, Color.Danger);
+ pb.Add(a => a.DeleteConfirmButtonIcon, "icon-delete");
+ pb.Add(a => a.DeleteConfirmContent, "content-delete");
+ pb.Add(a => a.DeleteConfirmButtonText, "confirm");
+ pb.Add(a => a.DeleteCloseButtonText, "cancel");
+ });
+
+ var input = cut.FindComponent();
+ await cut.InvokeAsync(() => input.Instance.OnChange.InvokeAsync(new InputFileChangeEventArgs(new List()
+ {
+ new()
+ })));
+
+ var button = cut.FindComponent();
+ Assert.NotNull(button);
+ Assert.NotNull(button.Instance.OnConfirm);
+ Assert.DoesNotContain("pop-confirm disabled", button.Markup);
+
+ await cut.InvokeAsync(button.Instance.OnConfirm);
+ Assert.Contains("pop-confirm disabled", button.Markup);
+ }
+
[Fact]
public async Task InputUpload_ValidateForm_Ok()
{
@@ -209,6 +239,7 @@ await cut.InvokeAsync(() => input.Instance.OnChange.InvokeAsync(new InputFileCha
Assert.DoesNotContain("test5.png;test6.png", cut.Markup);
}
+
[Fact]
public void InputUpload_IsMultiple()
{