Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 数据注释验证器不';无法使用自定义组件_Asp.net Core_Blazor_Blazor Webassembly - Fatal编程技术网

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”。它们都不是必要的在基类中使用它们的等价项。