C# 继承自InputBase的自定义输入中的Blazor级联参数问题
因此,我正在blazor中构建一个组件库,并添加对输入组件的支持,以使blazor具有内置验证C# 继承自InputBase的自定义输入中的Blazor级联参数问题,c#,asp.net-core,blazor,blazor-webassembly,C#,Asp.net Core,Blazor,Blazor Webassembly,因此,我正在blazor中构建一个组件库,并添加对输入组件的支持,以使blazor具有内置验证 @inherits WindyInputTextBase; @if(!string.IsNullOrEmpty(Label)) { <label for="@Id" class="block text-sm font-medium">@Label</label> } <input class="mt-3 p-2
@inherits WindyInputTextBase;
@if(!string.IsNullOrEmpty(Label))
{
<label for="@Id" class="block text-sm font-medium">@Label</label>
}
<input class="mt-3 p-2 focus:outline-none focus:ring focus:ring-primary-light focus:border-primary block w-full shadow-sm sm:text-sm border border-gray-300 rounded-md @CssClass" id="@Id" name="@Id" @bind="@CurrentValue" />
<!--Div is empty when validation is not done.-->
<div class="text-danger text-sm mb-3">
<ValidationMessage For="@ValidationFor" />
</div>
@继承WindyInputTextBase;
@如果(!string.IsNullOrEmpty(标签))
{
@标签
}
输入组件的基类:
public class WindyInputTextBase : WindyInputBase<string>
{
protected override bool TryParseValueFromString(string? value, [MaybeNullWhen(false)] out string result, [NotNullWhen(false)] out string? validationErrorMessage)
{
result = value is null ? string.Empty : value;
validationErrorMessage = null;
return true;
}
}
公共类WindyInputTextBase:WindyInputBase
{
受保护的重写bool TryParseValueFromString(string?值,[MaybeNullWhen(false)]输出字符串结果,[NotNullWhen(false)]输出字符串?验证错误消息)
{
结果=值为空?字符串。空:值;
validationErrorMessage=null;
返回true;
}
}
那个的基类是:
public abstract class WindyInputBase<T> : InputBase<T>
{
[Parameter]
public string? Label { get; set; }
[Parameter]
public Expression<Func<T>>? ValidationFor { get; set; }
}
公共抽象类WindyInputBase:InputBase
{
[参数]
公共字符串?标签{get;set;}
[参数]
公共表达式?验证{get;set;}
}
该组件(以及使用相同基的其他组件)工作正常,但在EditForm组件外部使用它们时,会出现以下错误:
public class WindyInputTextBase : WindyInputBase<string>
{
protected override bool TryParseValueFromString(string? value, [MaybeNullWhen(false)] out string result, [NotNullWhen(false)] out string? validationErrorMessage)
{
result = value is null ? string.Empty : value;
validationErrorMessage = null;
return true;
}
}
未处理的异常呈现组件:WindyUI.Form.EditForm.WindyInputText需要EditContext类型的级联参数。例如,可以在EditForm中使用WindyUI.Form.EditForm.WindyInputText。
System.InvalidOperationException:WindyUI.Form.EditForm.WindyInputText需要EditContext类型的级联参数。例如,可以在EditForm中使用WindyUI.Form.EditForm.WindyInputText
这很好,也是意料之中的,但是我不得不编写两组输入组件,一组有验证,另一组没有。我知道MudBlazor做了我想做的事情,但我不知道他们到底是怎么做的,他们的源代码对我来说并不清楚,因为没有从InputBase继承
有没有一种方法可以创建一个具有blazor内置验证的组件,该组件可以在EditForm组件内部和外部使用?当然,这意味着当不在EditForm中使用组件时,没有内置的验证是好的
谢谢,面对同样的问题,我从这里开始。。。谢谢,克里斯·萨蒂确实是一个了不起的消息来源。