Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.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
C# 继承自InputBase的自定义输入中的Blazor级联参数问题_C#_Asp.net Core_Blazor_Blazor Webassembly - Fatal编程技术网

C# 继承自InputBase的自定义输入中的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

因此,我正在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 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中使用组件时,没有内置的验证是好的


谢谢,

面对同样的问题,我从这里开始。。。谢谢,克里斯·萨蒂确实是一个了不起的消息来源。