diff --git a/src/BootstrapBlazor.Shared/Samples/EditDialogs.razor.cs b/src/BootstrapBlazor.Shared/Samples/EditDialogs.razor.cs
index 7c3eeebc7a77d4e6cbd5c560707843baa3c61ccd..7c56d1e8ad37d803fadf129068143513207de249 100644
--- a/src/BootstrapBlazor.Shared/Samples/EditDialogs.razor.cs
+++ b/src/BootstrapBlazor.Shared/Samples/EditDialogs.razor.cs
@@ -54,7 +54,7 @@ namespace BootstrapBlazor.Shared.Samples
Trace.Log("关闭按钮被点击");
return Task.CompletedTask;
},
- OnSaveAsync = context =>
+ OnEditAsync = context =>
{
Trace.Log("保存按钮被点击");
return Task.FromResult(true);
@@ -83,7 +83,7 @@ namespace BootstrapBlazor.Shared.Samples
Trace.Log("关闭按钮被点击");
return Task.CompletedTask;
},
- OnSaveAsync = context =>
+ OnEditAsync = context =>
{
Trace.Log("保存按钮被点击");
return Task.FromResult(true);
@@ -117,7 +117,7 @@ namespace BootstrapBlazor.Shared.Samples
Trace.Log("关闭按钮被点击");
return Task.CompletedTask;
},
- OnSaveAsync = context =>
+ OnEditAsync = context =>
{
Trace.Log("保存按钮被点击");
return Task.FromResult(true);
diff --git a/src/BootstrapBlazor/Components/Dialog/Dialog.razor.cs b/src/BootstrapBlazor/Components/Dialog/Dialog.razor.cs
index b7d79b90b93292793877d86d9251755baa92f61a..1fe732d5f25e447cee5df998caba6d07be739d88 100644
--- a/src/BootstrapBlazor/Components/Dialog/Dialog.razor.cs
+++ b/src/BootstrapBlazor/Components/Dialog/Dialog.razor.cs
@@ -25,7 +25,7 @@ namespace BootstrapBlazor.Components
///
/// 获得/设置 弹出对话框实例集合
///
- private List>> DialogParameters { get; } = new();
+ private List> DialogParameters { get; } = new();
private bool IsKeyboard { get; set; }
@@ -69,30 +69,45 @@ namespace BootstrapBlazor.Components
{
IsKeyboard = option.IsKeyboard;
option.Dialog = ModalContainer;
- var parameters = option.ToAttributes().ToList();
+ var parameters = option.ToAttributes();
var content = option.BodyTemplate ?? option.Component?.Render();
if (content != null)
{
- parameters.Add(new(nameof(ModalDialog.BodyTemplate), content));
+ parameters.Add(nameof(ModalDialog.BodyTemplate), content);
}
if (option.HeaderTemplate != null)
{
- parameters.Add(new(nameof(ModalDialog.HeaderTemplate), option.HeaderTemplate));
+ parameters.Add(nameof(ModalDialog.HeaderTemplate), option.HeaderTemplate);
}
if (option.FooterTemplate != null)
{
- parameters.Add(new(nameof(ModalDialog.FooterTemplate), option.FooterTemplate));
+ parameters.Add(nameof(ModalDialog.FooterTemplate), option.FooterTemplate);
}
if (!string.IsNullOrEmpty(option.Class))
{
- parameters.Add(new(nameof(ModalDialog.Class), option.Class));
+ parameters.Add(nameof(ModalDialog.Class), option.Class);
}
- parameters.Add(new(nameof(ModalDialog.OnClose), new Func(async () =>
+ if (option.OnSaveAsync != null)
+ {
+ parameters.Add(nameof(ModalDialog.OnSaveAsync), option.OnSaveAsync);
+ }
+
+ if (option.CloseButtonText != null)
+ {
+ parameters.Add(nameof(ModalDialog.CloseButtonText), option.CloseButtonText);
+ }
+
+ if (option.SaveButtonText != null)
+ {
+ parameters.Add(nameof(ModalDialog.SaveButtonText), option.SaveButtonText);
+ }
+
+ parameters.Add(nameof(ModalDialog.OnClose), new Func(async () =>
{
// 回调 OnClose 方法
// 移除当前对话框
@@ -105,7 +120,7 @@ namespace BootstrapBlazor.Components
// 支持多级弹窗
await ModalContainer.CloseOrPopDialog();
StateHasChanged();
- })));
+ }));
DialogParameters.Add(parameters);
if (DialogParameters.Count == 1)
diff --git a/src/BootstrapBlazor/Components/Dialog/DialogOption.cs b/src/BootstrapBlazor/Components/Dialog/DialogOption.cs
index 0d33ff6804142ecdd2afc7fad0a9d4a76564bec7..4a31fb0958621e643d2fb75dc15e4489c9cdf03c 100644
--- a/src/BootstrapBlazor/Components/Dialog/DialogOption.cs
+++ b/src/BootstrapBlazor/Components/Dialog/DialogOption.cs
@@ -71,6 +71,11 @@ namespace BootstrapBlazor.Components
///
public bool ShowPrintButton { get; set; }
+ ///
+ /// 获得/设置 是否显示保存按钮 默认 false 不显示
+ ///
+ public bool ShowSaveButton { get; set; }
+
///
/// 获得/设置 打印按钮是否显示在 Header 中 默认 false 不显示
///
@@ -111,35 +116,51 @@ namespace BootstrapBlazor.Components
///
public Func? OnCloseAsync { get; set; }
+ ///
+ /// 获得/设置 保存按钮回调方法
+ ///
+ public Func>? OnSaveAsync { get; set; }
+
+ ///
+ /// 获得/设置 关闭按钮文本
+ ///
+ public string? CloseButtonText { get; set; }
+
+ ///
+ /// 获得/设置 查询按钮文本
+ ///
+ public string? SaveButtonText { get; set; }
+
///
/// 将参数转换为组件属性方法
///
///
- public IEnumerable> ToAttributes()
+ public Dictionary ToAttributes()
{
- var ret = new List>
+ var ret = new Dictionary
{
- new(nameof(Size), Size),
- new(nameof(IsCentered), IsCentered),
- new(nameof(IsScrolling), IsScrolling),
- new(nameof(ShowCloseButton), ShowCloseButton),
- new(nameof(ShowHeaderCloseButton), ShowHeaderCloseButton),
- new(nameof(ShowFooter), ShowFooter),
- new(nameof(ShowPrintButton), ShowPrintButton),
- new(nameof(ShowPrintButtonInHeader), ShowPrintButtonInHeader),
- new(nameof(IsKeyboard), IsKeyboard)
+ [nameof(Size)] = Size,
+ [nameof(IsCentered)] = IsCentered,
+ [nameof(IsScrolling)] = IsScrolling,
+ [nameof(ShowCloseButton)] = ShowCloseButton,
+ [nameof(ShowSaveButton)] = ShowSaveButton,
+ [nameof(ShowHeaderCloseButton)] = ShowHeaderCloseButton,
+ [nameof(ShowFooter)] = ShowFooter,
+ [nameof(ShowPrintButton)] = ShowPrintButton,
+ [nameof(ShowPrintButtonInHeader)] = ShowPrintButtonInHeader,
+ [nameof(IsKeyboard)] = IsKeyboard
};
if (!string.IsNullOrEmpty(PrintButtonText))
{
- ret.Add(new(nameof(PrintButtonText), PrintButtonText));
+ ret.Add(nameof(PrintButtonText), PrintButtonText);
}
if (!string.IsNullOrEmpty(Title))
{
- ret.Add(new(nameof(Title), Title));
+ ret.Add(nameof(Title), Title);
}
if (BodyContext != null)
{
- ret.Add(new(nameof(BodyContext), BodyContext));
+ ret.Add(nameof(BodyContext), BodyContext);
}
return ret;
}
diff --git a/src/BootstrapBlazor/Components/Dialog/DialogService.cs b/src/BootstrapBlazor/Components/Dialog/DialogService.cs
index e3589f15152ef80d40f2a4d4a14b280d01320f18..6a911def4e70cba2f19e6d25c504fc518396bab9 100644
--- a/src/BootstrapBlazor/Components/Dialog/DialogService.cs
+++ b/src/BootstrapBlazor/Components/Dialog/DialogService.cs
@@ -16,28 +16,6 @@ namespace BootstrapBlazor.Components
///
public class DialogService : BootstrapServiceBase
{
- private IStringLocalizer> EditDialogLocalizer { get; set; }
-
- private IStringLocalizer> SearchDialogLocalizer { get; set; }
-
- private IStringLocalizer ResultDialogLocalizer { get; set; }
-
- ///
- /// 构造函数
- ///
- ///
- ///
- ///
- public DialogService(
- IStringLocalizer> editLocalizer,
- IStringLocalizer> seachLocalizer,
- IStringLocalizer resultDialogLocalizer)
- {
- EditDialogLocalizer = editLocalizer;
- SearchDialogLocalizer = seachLocalizer;
- ResultDialogLocalizer = resultDialogLocalizer;
- }
-
///
/// 显示 Dialog 方法
///
@@ -53,9 +31,6 @@ namespace BootstrapBlazor.Components
/// 指定弹窗组件 默认为 null 使用 组件内置弹窗组件
public async Task ShowSearchDialog(SearchDialogOption option, Dialog? dialog = null)
{
- option.ResetButtonText ??= SearchDialogLocalizer[nameof(option.ResetButtonText)];
- option.QueryButtonText ??= SearchDialogLocalizer[nameof(option.QueryButtonText)];
-
var parameters = new Dictionary
{
[nameof(SearchDialog.ShowLabel)] = option.ShowLabel,
@@ -119,9 +94,6 @@ namespace BootstrapBlazor.Components
///
public async Task ShowEditDialog(EditDialogOption option, Dialog? dialog = null)
{
- option.CloseButtonText ??= EditDialogLocalizer[nameof(option.CloseButtonText)];
- option.SaveButtonText ??= EditDialogLocalizer[nameof(option.SaveButtonText)];
-
var parameters = new Dictionary
{
[nameof(EditDialog.ShowLoading)] = option.ShowLoading,
@@ -134,9 +106,9 @@ namespace BootstrapBlazor.Components
}),
[nameof(EditDialog.OnSaveAsync)] = new Func(async context =>
{
- if (option.OnSaveAsync != null)
+ if (option.OnEditAsync != null)
{
- var ret = await option.OnSaveAsync(context);
+ var ret = await option.OnEditAsync(context);
if (ret)
{
option.Dialog.RemoveDialog();
@@ -202,10 +174,12 @@ namespace BootstrapBlazor.Components
option.FooterTemplate = BootstrapDynamicComponent.CreateComponent(new Dictionary
{
+ [nameof(ResultDialogFooter.ButtonCloseText)] = option.ButtonCloseText!,
+ [nameof(ResultDialogFooter.ButtonNoText)] = option.ButtonNoText!,
+ [nameof(ResultDialogFooter.ButtonYesText)] = option.ButtonYesText!,
[nameof(ResultDialogFooter.ShowCloseButton)] = option.ShowCloseButton,
[nameof(ResultDialogFooter.ButtonCloseColor)] = option.ButtonCloseColor,
[nameof(ResultDialogFooter.ButtonCloseIcon)] = option.ButtonCloseIcon,
- [nameof(ResultDialogFooter.ButtonCloseText)] = option.ButtonCloseText ?? ResultDialogLocalizer[nameof(option.ButtonCloseText)].Value,
[nameof(ResultDialogFooter.OnClickClose)] = new Func(async () =>
{
result = DialogResult.Close;
@@ -215,7 +189,6 @@ namespace BootstrapBlazor.Components
[nameof(ResultDialogFooter.ShowYesButton)] = option.ShowYesButton,
[nameof(ResultDialogFooter.ButtonYesColor)] = option.ButtonYesColor,
[nameof(ResultDialogFooter.ButtonYesIcon)] = option.ButtonYesIcon,
- [nameof(ResultDialogFooter.ButtonYesText)] = option.ButtonYesText ?? ResultDialogLocalizer[nameof(option.ButtonYesText)].Value,
[nameof(ResultDialogFooter.OnClickYes)] = new Func(async () =>
{
result = DialogResult.Yes;
@@ -225,7 +198,6 @@ namespace BootstrapBlazor.Components
[nameof(ResultDialogFooter.ShowNoButton)] = option.ShowNoButton,
[nameof(ResultDialogFooter.ButtonNoColor)] = option.ButtonNoColor,
[nameof(ResultDialogFooter.ButtonNoIcon)] = option.ButtonNoIcon,
- [nameof(ResultDialogFooter.ButtonNoText)] = option.ButtonNoText ?? ResultDialogLocalizer[nameof(option.ButtonNoText)].Value,
[nameof(ResultDialogFooter.OnClickNo)] = new Func(async () =>
{
result = DialogResult.No;
diff --git a/src/BootstrapBlazor/Components/Dialog/EditDialogOption.cs b/src/BootstrapBlazor/Components/Dialog/EditDialogOption.cs
index 6f293b2b120e380c38dc690ecb1943b2bcc497c3..19a73336ba210457a698e6e961875a472e725a8b 100644
--- a/src/BootstrapBlazor/Components/Dialog/EditDialogOption.cs
+++ b/src/BootstrapBlazor/Components/Dialog/EditDialogOption.cs
@@ -80,16 +80,6 @@ namespace BootstrapBlazor.Components
///
/// 获得/设置 保存回调委托
///
- public Func>? OnSaveAsync { get; set; }
-
- ///
- /// 获得/设置 关闭按钮文本
- ///
- public string? CloseButtonText { get; set; }
-
- ///
- /// 获得/设置 查询按钮文本
- ///
- public string? SaveButtonText { get; set; }
+ public Func>? OnEditAsync { get; set; }
}
}
diff --git a/src/BootstrapBlazor/Components/Dialog/ResultDialogFooter.razor.cs b/src/BootstrapBlazor/Components/Dialog/ResultDialogFooter.razor.cs
index a12b267dbb067a37f1210ed6b9e6a51ac65b25bc..855ca8064dd9a546ec26e3e3e757770c314e373a 100644
--- a/src/BootstrapBlazor/Components/Dialog/ResultDialogFooter.razor.cs
+++ b/src/BootstrapBlazor/Components/Dialog/ResultDialogFooter.razor.cs
@@ -3,6 +3,7 @@
// Website: https://www.blazor.zone or https://argozhang.github.io/
using Microsoft.AspNetCore.Components;
+using Microsoft.Extensions.Localization;
using System;
using System.Diagnostics.CodeAnalysis;
using System.Threading.Tasks;
@@ -95,23 +96,39 @@ namespace BootstrapBlazor.Components
public Color ButtonCloseColor { get; set; } = Color.Secondary;
///
- ///
+ /// 获得/设置 点击关闭按钮回调方法
///
[Parameter]
public Func? OnClickClose { get; set; }
///
- ///
+ /// 获得/设置 点击确认按钮回调方法
///
[Parameter]
public Func? OnClickYes { get; set; }
///
- ///
+ /// 获得/设置 点击取消按钮回调方法
///
[Parameter]
public Func? OnClickNo { get; set; }
+ [Inject]
+ [NotNull]
+ private IStringLocalizer? Localizer { get; set; }
+
+ ///
+ /// OnInitialized 方法
+ ///
+ protected override void OnInitialized()
+ {
+ base.OnInitialized();
+
+ ButtonCloseText ??= Localizer[nameof(ButtonCloseText)];
+ ButtonNoText ??= Localizer[nameof(ButtonNoText)];
+ ButtonYesText ??= Localizer[nameof(ButtonYesText)];
+ }
+
private async Task ButtonClick(DialogResult dialogResult)
{
if (dialogResult == DialogResult.Yes && OnClickYes != null)
diff --git a/src/BootstrapBlazor/Components/Dialog/ResultDialogOption.cs b/src/BootstrapBlazor/Components/Dialog/ResultDialogOption.cs
index a6a77725f123c2eccb1bd3e522ef85e6a18ef297..ee8f4c0ba620b4775e7572901b010059c79d9922 100644
--- a/src/BootstrapBlazor/Components/Dialog/ResultDialogOption.cs
+++ b/src/BootstrapBlazor/Components/Dialog/ResultDialogOption.cs
@@ -3,7 +3,6 @@
// Website: https://www.blazor.zone or https://argozhang.github.io/
using System.Collections.Generic;
-using System.Diagnostics.CodeAnalysis;
using System.Threading.Tasks;
namespace BootstrapBlazor.Components
@@ -29,7 +28,6 @@ namespace BootstrapBlazor.Components
///
/// 确认按钮文本
///
- [NotNull]
public string? ButtonYesText { get; set; }
///
@@ -50,7 +48,6 @@ namespace BootstrapBlazor.Components
///
/// 取消按钮文本
///
- [NotNull]
public string? ButtonNoText { get; set; }
///
@@ -66,7 +63,6 @@ namespace BootstrapBlazor.Components
///
/// 关闭按钮文本
///
- [NotNull]
public string? ButtonCloseText { get; set; }
///
diff --git a/src/BootstrapBlazor/Components/Modal/ModalDialog.razor b/src/BootstrapBlazor/Components/Modal/ModalDialog.razor
index 41c4fa3c268ab6d6393d2020d2d056e3e76465bb..8d0a70a1ae81e5da53fb829a5d379a5ed54aa0e6 100644
--- a/src/BootstrapBlazor/Components/Modal/ModalDialog.razor
+++ b/src/BootstrapBlazor/Components/Modal/ModalDialog.razor
@@ -30,12 +30,16 @@
}
diff --git a/src/BootstrapBlazor/Components/Modal/ModalDialog.razor.cs b/src/BootstrapBlazor/Components/Modal/ModalDialog.razor.cs
index 24d6a08474b5788bcdd67637b34917db98858048..9ed624c1d9385ce0fd470b2312256cdfe6975684 100644
--- a/src/BootstrapBlazor/Components/Modal/ModalDialog.razor.cs
+++ b/src/BootstrapBlazor/Components/Modal/ModalDialog.razor.cs
@@ -80,6 +80,12 @@ namespace BootstrapBlazor.Components
[Parameter]
public bool ShowCloseButton { get; set; } = true;
+ ///
+ /// 获得/设置 是否显示保存按钮 默认为 false 不显示
+ ///
+ [Parameter]
+ public bool ShowSaveButton { get; set; }
+
///
/// 获得/设置 是否显示打印按钮 默认为 false 不显示
///
@@ -135,12 +141,26 @@ namespace BootstrapBlazor.Components
public RenderFragment? HeaderTemplate { get; set; }
///
- /// 获得/设置 关闭弹窗是回调委托
+ /// 获得/设置 关闭弹窗回调委托
///
[Parameter]
[NotNull]
public Func? OnClose { get; set; }
+ ///
+ /// 获得/设置 保存按钮回调委托
+ ///
+ [Parameter]
+ [NotNull]
+ public Func>? OnSaveAsync { get; set; }
+
+ ///
+ /// 获得/设置 保存成功后是否自动关闭弹窗 默认 true 自动关闭
+ ///
+ [Parameter]
+ [NotNull]
+ public bool IsAutoCloseAfterSave { get; set; } = true;
+
///
/// 获得/设置 关闭按钮显示文字 资源文件设置为 关闭
///
@@ -148,6 +168,13 @@ namespace BootstrapBlazor.Components
[NotNull]
public string? CloseButtonText { get; set; }
+ ///
+ /// 获得/设置 保存按钮显示文字 资源文件设置为 保存
+ ///
+ [Parameter]
+ [NotNull]
+ public string? SaveButtonText { get; set; }
+
///
/// 获得/设置 弹窗容器实例
///
@@ -172,6 +199,7 @@ namespace BootstrapBlazor.Components
}
CloseButtonText ??= Localizer[nameof(CloseButtonText)];
+ SaveButtonText ??= Localizer[nameof(SaveButtonText)];
PrintButtonText ??= Localizer[nameof(PrintButtonText)];
Interop = new JSInterop(JSRuntime);
@@ -203,6 +231,15 @@ namespace BootstrapBlazor.Components
}
}
+ private async Task OnClickSave()
+ {
+ var ret = await OnSaveAsync();
+ if (IsAutoCloseAfterSave && ret)
+ {
+ await OnClickClose();
+ }
+ }
+
///
/// Close 方法 客户端按 ESC 键盘时调用
///
diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs
index 2aa735717b325e473951a9d1b61c4d00a9366cf5..b8c5905ac3be66ef19f955dbabc33f761def4215 100644
--- a/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs
+++ b/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs
@@ -544,7 +544,7 @@ namespace BootstrapBlazor.Components
}
await UpdateAsync();
},
- OnSaveAsync = async context =>
+ OnEditAsync = async context =>
{
await ToggleLoading(true);
var valid = await SaveModelAsync(context, changedType);
diff --git a/src/BootstrapBlazor/Locales/en.json b/src/BootstrapBlazor/Locales/en.json
index fb95c6c66a1fdac6c98626dd739f1e026f9066ad..30cd083d00d6e473eba8542e95306cb0d0e7e57a 100644
--- a/src/BootstrapBlazor/Locales/en.json
+++ b/src/BootstrapBlazor/Locales/en.json
@@ -133,6 +133,7 @@
},
"BootstrapBlazor.Components.ModalDialog": {
"CloseButtonText": "Close",
+ "SaveButtonText": "Save",
"PrintButtonText": "Print"
},
"BootstrapBlazor.Components.MultiSelect": {
diff --git a/src/BootstrapBlazor/Locales/pt.json b/src/BootstrapBlazor/Locales/pt.json
index 723ca9bc2cff05882d01b1822fffbc3f1f37854b..a21392f862a9973eba3e0c916deb86fda9bd77dc 100644
--- a/src/BootstrapBlazor/Locales/pt.json
+++ b/src/BootstrapBlazor/Locales/pt.json
@@ -133,6 +133,7 @@
},
"BootstrapBlazor.Components.ModalDialog": {
"CloseButtonText": "Fechar",
+ "SaveButtonText": "Salvar",
"PrintButtonText": "Imprimir"
},
"BootstrapBlazor.Components.MultiSelect": {
diff --git a/src/BootstrapBlazor/Locales/zh.json b/src/BootstrapBlazor/Locales/zh.json
index 56f8642498c343c7ba8fbda36567e9fe3c59d0b9..a7c7648f56259c61ace77ffe5e6fa7fd706cb6a7 100644
--- a/src/BootstrapBlazor/Locales/zh.json
+++ b/src/BootstrapBlazor/Locales/zh.json
@@ -133,6 +133,7 @@
},
"BootstrapBlazor.Components.ModalDialog": {
"CloseButtonText": "关闭",
+ "SaveButtonText": "保存",
"PrintButtonText": "打印"
},
"BootstrapBlazor.Components.MultiSelect": {
diff --git a/test/UnitTest/Components/DialogTest.cs b/test/UnitTest/Components/DialogTest.cs
index 0dabaab66cf87972e4e5bc586f668bc5f825139c..19e01e61f9e45b2737b9303f50efce1daab38a16 100644
--- a/test/UnitTest/Components/DialogTest.cs
+++ b/test/UnitTest/Components/DialogTest.cs
@@ -137,7 +137,7 @@ namespace UnitTest.Components
// 设置保存回调
var saved = false;
editOption.ShowLoading = true;
- editOption.OnSaveAsync = context =>
+ editOption.OnEditAsync = context =>
{
saved = true;
return Task.FromResult(true);