From d01978aa1ec0eff9e419fd2588f2251305674975 Mon Sep 17 00:00:00 2001
From: Tony-ST0754 <6914529@qq.com>
Date: Thu, 29 Oct 2026 15:30:26 +0800
Subject: [PATCH 1/4] feat(AutoGenerateColumn):Enable Required Support
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
feat:开启Required、IsRequiredWhenAdd、IsRequiredWhenEdit属性支持
---
.../Attributes/AutoGenerateColumnAttribute.cs | 54 +++++++++++++++++--
.../Attributes/AutoGenerateClassTest.cs | 51 ++++++++++++++++++
2 files changed, 102 insertions(+), 3 deletions(-)
diff --git a/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs b/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs
index cb307e7320e..cd2c9820bee 100644
--- a/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs
+++ b/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs
@@ -84,11 +84,59 @@ public class AutoGenerateColumnAttribute : AutoGenerateBaseAttribute, ITableColu
set => IsVisibleWhenEdit = value ?? true;
}
- bool? IEditorItem.Required { get; set; }
+ private bool? _required;
- bool? ITableColumn.IsRequiredWhenAdd { get; set; }
+ ///
+ /// 获得/设置 当前列是否必填。默认值为 null,使用 或 、 值
+ /// Gets or sets whether the current column is required. Default is null, using the or the , values
+ ///
+ public bool Required
+ {
+ get => _required ?? false;
+ set => _required = value;
+ }
+
+ bool? IEditorItem.Required
+ {
+ get => _required;
+ set => _required = value;
+ }
+
+ private bool? _isRequiredWhenAdd;
+
+ ///
+ /// 获得/设置 新建时此列是否必填。默认值为 null,使用 值
+ /// Gets or sets whether the column is required when adding a new item. Default is null, using the value
+ ///
+ public bool IsRequiredWhenAdd
+ {
+ get => _isRequiredWhenAdd ?? false;
+ set => _isRequiredWhenAdd = value;
+ }
+
+ bool? ITableColumn.IsRequiredWhenAdd
+ {
+ get => _isRequiredWhenAdd;
+ set => _isRequiredWhenAdd = value;
+ }
+
+ private bool? _isRequiredWhenEdit;
+
+ ///
+ /// 获得/设置 编辑时此列是否必填。默认值为 null,使用 值
+ /// Gets or sets whether the column is required when editing an item. Default is null, using the value
+ ///
+ public bool IsRequiredWhenEdit
+ {
+ get => _isRequiredWhenEdit ?? false;
+ set => _isRequiredWhenEdit = value;
+ }
- bool? ITableColumn.IsRequiredWhenEdit { get; set; }
+ bool? ITableColumn.IsRequiredWhenEdit
+ {
+ get => _isRequiredWhenEdit;
+ set => _isRequiredWhenEdit = value;
+ }
///
///
diff --git a/test/UnitTest/Attributes/AutoGenerateClassTest.cs b/test/UnitTest/Attributes/AutoGenerateClassTest.cs
index c8cda49e09e..f44cdc4644a 100644
--- a/test/UnitTest/Attributes/AutoGenerateClassTest.cs
+++ b/test/UnitTest/Attributes/AutoGenerateClassTest.cs
@@ -248,6 +248,57 @@ public void AutoGenerateColumn_Ok()
Assert.Equal("test", attr.RequiredErrorMessage);
}
+ [Fact]
+ public void AutoGenerateColumn_Required_Ok()
+ {
+ var attr = new AutoGenerateColumnAttribute();
+ var editItem = (IEditorItem)attr;
+ var tableColumn = (ITableColumn)attr;
+
+ // 未设置时接口层保持 null 以便回退到 RequiredAttribute 或者 IsRequiredWhenAdd/IsRequiredWhenEdit
+ Assert.False(attr.Required);
+ Assert.Null(editItem.Required);
+ Assert.False(attr.IsRequiredWhenAdd);
+ Assert.Null(tableColumn.IsRequiredWhenAdd);
+ Assert.False(attr.IsRequiredWhenEdit);
+ Assert.Null(tableColumn.IsRequiredWhenEdit);
+
+ // 支持通过特性语法赋值
+ attr = new AutoGenerateColumnAttribute()
+ {
+ Required = true,
+ IsRequiredWhenAdd = true,
+ IsRequiredWhenEdit = true
+ };
+ editItem = attr;
+ tableColumn = attr;
+ Assert.True(attr.Required);
+ Assert.True(editItem.Required);
+ Assert.True(attr.IsRequiredWhenAdd);
+ Assert.True(tableColumn.IsRequiredWhenAdd);
+ Assert.True(attr.IsRequiredWhenEdit);
+ Assert.True(tableColumn.IsRequiredWhenEdit);
+
+ // 显式 false 需要与未设置区分
+ editItem.Required = false;
+ tableColumn.IsRequiredWhenAdd = false;
+ tableColumn.IsRequiredWhenEdit = false;
+ Assert.False(attr.Required);
+ Assert.False(editItem.Required);
+ Assert.False(attr.IsRequiredWhenAdd);
+ Assert.False(tableColumn.IsRequiredWhenAdd);
+ Assert.False(attr.IsRequiredWhenEdit);
+ Assert.False(tableColumn.IsRequiredWhenEdit);
+
+ // 通过接口设置 null 后恢复未设置状态
+ editItem.Required = null;
+ tableColumn.IsRequiredWhenAdd = null;
+ tableColumn.IsRequiredWhenEdit = null;
+ Assert.Null(editItem.Required);
+ Assert.Null(tableColumn.IsRequiredWhenAdd);
+ Assert.Null(tableColumn.IsRequiredWhenEdit);
+ }
+
class LookupService : LookupServiceBase
{
public override IEnumerable? GetItemsByKey(string? key, object? data) => null;
From 79f1be545db2f470fa26845b5b9b01e3bb65b524 Mon Sep 17 00:00:00 2001
From: Argo Zhang
Date: Fri, 30 Oct 2026 21:30:43 +0800
Subject: [PATCH 2/4] =?UTF-8?q?doc:=20=E6=9B=B4=E6=96=B0=E6=B3=A8=E9=87=8A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Attributes/AutoGenerateColumnAttribute.cs | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs b/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs
index cd2c9820bee..d0c01b1aa2e 100644
--- a/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs
+++ b/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs
@@ -87,8 +87,10 @@ public class AutoGenerateColumnAttribute : AutoGenerateBaseAttribute, ITableColu
private bool? _required;
///
- /// 获得/设置 当前列是否必填。默认值为 null,使用 或 、 值
- /// Gets or sets whether the current column is required. Default is null, using the or the , values
+ /// 获得/设置 当前列是否必填。未显式设置时,此属性返回 false, 接口属性保持 null
+ /// Gets or sets whether the current column is required. When not explicitly set, this property returns false while the interface property remains null
+ /// 显式设置后优先于 、;未设置时按新建或编辑状态使用对应参数,Required 与对应参数均未设置时回退到 判断
+ /// An explicit value takes precedence over and . Otherwise, the parameter for the current add or edit operation is used; if neither Required nor that parameter is set, the required state falls back to
///
public bool Required
{
@@ -105,8 +107,8 @@ public bool Required
private bool? _isRequiredWhenAdd;
///
- /// 获得/设置 新建时此列是否必填。默认值为 null,使用 值
- /// Gets or sets whether the column is required when adding a new item. Default is null, using the value
+ /// 获得/设置 新建时此列是否必填。仅在 未显式设置时生效。未显式设置时,此属性返回 false, 接口属性保持 null
+ /// Gets or sets whether the column is required when adding a new item. Applies only when is not explicitly set. When not explicitly set, this property returns false while the interface property remains null
///
public bool IsRequiredWhenAdd
{
@@ -123,8 +125,8 @@ public bool IsRequiredWhenAdd
private bool? _isRequiredWhenEdit;
///
- /// 获得/设置 编辑时此列是否必填。默认值为 null,使用 值
- /// Gets or sets whether the column is required when editing an item. Default is null, using the value
+ /// 获得/设置 编辑时此列是否必填。仅在 未显式设置时生效。未显式设置时,此属性返回 false, 接口属性保持 null
+ /// Gets or sets whether the column is required when editing an item. Applies only when is not explicitly set. When not explicitly set, this property returns false while the interface property remains null
///
public bool IsRequiredWhenEdit
{
From c729e07f13988473765a86ca28883c632fdd84c7 Mon Sep 17 00:00:00 2001
From: Argo Zhang
Date: Fri, 30 Oct 2026 21:31:48 +0800
Subject: [PATCH 3/4] =?UTF-8?q?doc:=20=E5=90=88=E5=B9=B6=E6=B3=A8=E9=87=8A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Attributes/AutoGenerateColumnAttribute.cs | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs b/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs
index d0c01b1aa2e..57391791931 100644
--- a/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs
+++ b/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs
@@ -87,10 +87,8 @@ public class AutoGenerateColumnAttribute : AutoGenerateBaseAttribute, ITableColu
private bool? _required;
///
- /// 获得/设置 当前列是否必填。未显式设置时,此属性返回 false, 接口属性保持 null
- /// Gets or sets whether the current column is required. When not explicitly set, this property returns false while the interface property remains null
- /// 显式设置后优先于 、;未设置时按新建或编辑状态使用对应参数,Required 与对应参数均未设置时回退到 判断
- /// An explicit value takes precedence over and . Otherwise, the parameter for the current add or edit operation is used; if neither Required nor that parameter is set, the required state falls back to
+ /// 获得/设置 当前列是否必填。未显式设置时,此属性返回 false, 接口属性保持 null 显式设置后优先于 、;未设置时按新建或编辑状态使用对应参数,Required 与对应参数均未设置时回退到 判断
+ /// Gets or sets whether the current column is required. When not explicitly set, this property returns false while the interface property remains null. An explicit value takes precedence over and . Otherwise, the parameter for the current add or edit operation is used; if neither Required nor that parameter is set, the required state falls back to
///
public bool Required
{
From ed0db4193ec94bb98c2dc5c17b9ae6706667cbec Mon Sep 17 00:00:00 2001
From: Argo Zhang
Date: Fri, 30 Oct 2026 21:32:23 +0800
Subject: [PATCH 4/4] =?UTF-8?q?doc:=20=E5=A2=9E=E5=8A=A0=E7=89=88=E6=9C=AC?=
=?UTF-8?q?=E4=BF=A1=E6=81=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs b/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs
index 57391791931..6b11ecce0db 100644
--- a/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs
+++ b/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs
@@ -89,6 +89,7 @@ public class AutoGenerateColumnAttribute : AutoGenerateBaseAttribute, ITableColu
///
/// 获得/设置 当前列是否必填。未显式设置时,此属性返回 false, 接口属性保持 null 显式设置后优先于 、;未设置时按新建或编辑状态使用对应参数,Required 与对应参数均未设置时回退到 判断
/// Gets or sets whether the current column is required. When not explicitly set, this property returns false while the interface property remains null. An explicit value takes precedence over and . Otherwise, the parameter for the current add or edit operation is used; if neither Required nor that parameter is set, the required state falls back to
+ /// 11.1.0
///
public bool Required
{