Asp.net core 数据注释验证器不';无法使用自定义组件
我创建了这个自定义组件Asp.net core 数据注释验证器不';无法使用自定义组件,asp.net-core,blazor,blazor-webassembly,Asp.net Core,Blazor,Blazor Webassembly,我创建了这个自定义组件 @继承InputLabelPers1Base @标签值 从该类继承的: 公共类InputLabelPers1Base:InputBase { [参数] 公共字符串输入占位符{get;set;} [参数] 公共字符串LabelValue{get;set;} 受保护的任务OnInputValueChanged(ChangeEventArgs e) { Value=(字符串)e.Value; 返回值已更改。InvokeAsync(值); } 受保护的重写bool TryPar
@继承InputLabelPers1Base
@标签值
从该类继承的:
公共类InputLabelPers1Base:InputBase
{
[参数]
公共字符串输入占位符{get;set;}
[参数]
公共字符串LabelValue{get;set;}
受保护的任务OnInputValueChanged(ChangeEventArgs e)
{
Value=(字符串)e.Value;
返回值已更改。InvokeAsync(值);
}
受保护的重写bool TryParseValueFromString(字符串值,[MaybeNull]输出字符串结果,[NotNullWhen(false)]输出字符串验证错误消息)
{
结果=值;
validationErrorMessage=null;
返回true;
}
}
我将该组件添加到一个编辑表单
:
对于内置组件InputText
,验证工作正常,但对于我的自定义组件,验证工作不正常
//**工作正常**
提交
复制并测试。。。
代码中的注释和解释
InputLabelPers1Base.cs
公共类InputLabelPers1Base:InputBase
{
[参数]
公共字符串输入占位符{get;set;}
[参数]
公共字符串LabelValue{get;set;}
受保护的异步任务OnInputValueChanged(ChangeEventArgs e)
{
//使用CurrentValueAsString而不是Value
//Value=(字符串)e.Value;
//您不应该调用基类ValueChanged。
//将新值指定给
//CurrentValueAsString属性中的代码
//CurrentValueAsString调用的CurrentValue属性
//负责更新绑定到应用程序的字段
//InputLabelPerso1组件
CurrentValueAsString=e.Value.ToString();
等待任务。完成任务;
}
受保护的重写bool TryParseValueFromString(字符串值,[MaybeNull]输出字符串结果,[NotNullWhen(false)]输出字符串验证错误消息)
{
结果=值;
validationErrorMessage=null;
返回true;
}
}
InputLabelPerso1.0
@继承InputLabelPers1Base
@标签值
剃刀索引
@page/“
@使用System.ComponentModel.DataAnnotations
提交
@code
{
私人客户客户=新客户();
私人无效手册提交()
{
//仅当模型有效时调用
控制台。写入线(“已处理”);
}
私有void HandleInvalidSubmit()
{
//每当模型无效时调用
控制台。写入线(“无效”);
}
公共类客户
{
[必需]
公共字符串值1{get;set;}
[必需]
公共字符串值2{get;set;}
}
}
Plus即使模型无效,保存方法也会被触发,因为您使用的是OnInvalidSubmit而不是OnValidSubmit。为什么创建参数“SelectedValue”却从未使用过?出于习惯,因为您必须创建一对参数来存储接收到的值,并创建一个EventCallback来更新绑定值(客户端对象),从而创建双向数据绑定。但在这里我没有使用它…您可以删除it@yasseros,我更新了我的答案以反映你问题背后的原因,我认为这只是一个坏习惯。事实上,我根本不应该定义参数“SelectedValue”和“SelectedValueChanged”。它们都不是必要的在基类中使用它们的等价项。