diff --git a/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs b/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs
index cb307e7320e..6b11ecce0db 100644
--- a/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs
+++ b/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs
@@ -84,11 +84,60 @@ public class AutoGenerateColumnAttribute : AutoGenerateBaseAttribute, ITableColu
set => IsVisibleWhenEdit = value ?? true;
}
- bool? IEditorItem.Required { get; set; }
+ private bool? _required;
- bool? ITableColumn.IsRequiredWhenAdd { get; set; }
+ ///
+ /// 获得/设置 当前列是否必填。未显式设置时,此属性返回 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
+ {
+ get => _required ?? false;
+ set => _required = value;
+ }
+
+ bool? IEditorItem.Required
+ {
+ get => _required;
+ set => _required = value;
+ }
+
+ private bool? _isRequiredWhenAdd;
+
+ ///
+ /// 获得/设置 新建时此列是否必填。仅在 未显式设置时生效。未显式设置时,此属性返回 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
+ {
+ get => _isRequiredWhenAdd ?? false;
+ set => _isRequiredWhenAdd = value;
+ }
+
+ bool? ITableColumn.IsRequiredWhenAdd
+ {
+ get => _isRequiredWhenAdd;
+ set => _isRequiredWhenAdd = value;
+ }
+
+ private bool? _isRequiredWhenEdit;
+
+ ///
+ /// 获得/设置 编辑时此列是否必填。仅在 未显式设置时生效。未显式设置时,此属性返回 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
+ {
+ 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;