谁能帮助我了解如何解决以下错误消息:

组件"EditForm"的子内容元素"ChildContent"使用 与包含子内容元素相同的参数名称(‘CONTEXT 组件""AuthorizeView""的"已授权"

@page "/"

@using System.ComponentModel.DataAnnotations;
@using System.Globalization;
@inject ILogger<FreightCompany> Logger

<AuthorizeView>
    <Authorized>

        <EditForm EditContext="@editContext" OnSubmit="@Submit">
            <DataAnnotationsValidator />
            <ValidationSummary />

            <div class="row">
                <label>Link Name: @_model!.LinkName</label>
            </div>
            <div class="row">
                <label>Link Address:</label>
                <InputText type="time" class="m-1 form-control form-control-sm" @bind-Value="_model.LinkAddress" />
            </div>
            <div class="row">
                <button class="form-control btn btn-primary m-1" @onclick='()=>submitId="1"' type="submit">Submit</button>
                <button class="form-control btn btn-success m-1" @onclick='()=>submitId="2"' type="submit">Submit 2</button>
            </div>

        </EditForm>

        <div class="container">
            <div class="row">
                <table>
                    @if (_list.Count() > 0)
                    {
                        @foreach (var item in _list)
                        {
                            <tr>
                                <td><a href="@_model.LinkAddress">@_model.LinkName</a></td>                                
                            </tr>
                        }
                    }
                </table>
            </div>
        </div>

    </Authorized>
    <NotAuthorized>
        <p>Please signed in.</p>
    </NotAuthorized>
</AuthorizeView>


@code {
    string submitId = "";

    private EditContext? editContext;

    public FreightCompany? _model { get; set; }
    List<FreightCompany> _list = new();

    protected override void OnInitialized()
    {
        _model ??= new();        
        editContext = new(_model);
    }

    private void Submit()
    {
        switch (submitId)
        {
            case "1":
                Logger.LogInformation("Submit 1 pressed");
                var isValidForm = editContext!.Validate();
                if (isValidForm)
                {
                    _list.Add(_model!);
                    _model = new();
                    editContext = new(_model);
                }
                break;
            case "2":
                Logger.LogInformation("Submit 2 pressed");

                foreach (var item in _list)
                {
                    // SqliteDataAccess.SaveFreightLink(item);
                }

                break;
        }
        Logger.LogInformation("Model.Id = {Id}", _model?.Id);
    }
}

推荐答案

<AuthorizeView/><EditForm>都有ChildContent,它们将值传递给使用RenderFragment<T>.默认情况下,该值称为context.然而,由于这种嵌套,值context<EditForm/>内是不明确的.为了避免这种歧义,请为上下文声明一个不同的名称,而不是默认的context.您可以使用Context="newContextName"来完成此操作.例如,您可以拨打AuthorizeViewcontext authContext,如下所示:

@page "/"

@using System.ComponentModel.DataAnnotations;
@using System.Globalization;
@inject ILogger<FreightCompany> Logger

@* here we declare a different variable name for the context of AuthorizeView *@
<AuthorizeView Context="authContext">
    <Authorized>

        <EditForm EditContext="@editContext" OnSubmit="@Submit">
            <DataAnnotationsValidator />
            <ValidationSummary />

            <div class="row">
                <label>Link Name: @_model!.LinkName</label>
            </div>
            <div class="row">
                <label>Link Address:</label>
                <InputText type="time" class="m-1 form-control form-control-sm" @bind-Value="_model.LinkAddress" />
            </div>
            <div class="row">
                <button class="form-control btn btn-primary m-1" @onclick='()=>submitId="1"' type="submit">Submit</button>
                <button class="form-control btn btn-success m-1" @onclick='()=>submitId="2"' type="submit">Submit 2</button>
            </div>

        </EditForm>

        <div class="container">
            <div class="row">
                <table>
                    @if (_list.Count() > 0)
                    {
                        @foreach (var item in _list)
                        {
                            <tr>
                                <td><a href="@_model.LinkAddress">@_model.LinkName</a></td>                                
                            </tr>
                        }
                    }
                </table>
            </div>
        </div>

    </Authorized>
    <NotAuthorized>
        <p>Please signed in.</p>
    </NotAuthorized>
</AuthorizeView>


@code {
    string submitId = "";

    private EditContext? editContext;

    public FreightCompany? _model { get; set; }
    List<FreightCompany> _list = new();

    protected override void OnInitialized()
    {
        _model ??= new();        
        editContext = new(_model);
    }

    private void Submit()
    {
        switch (submitId)
        {
            case "1":
                Logger.LogInformation("Submit 1 pressed");
                var isValidForm = editContext!.Validate();
                if (isValidForm)
                {
                    _list.Add(_model!);
                    _model = new();
                    editContext = new(_model);
                }
                break;
            case "2":
                Logger.LogInformation("Submit 2 pressed");

                foreach (var item in _list)
                {
                    // SqliteDataAccess.SaveFreightLink(item);
                }

                break;
        }
        Logger.LogInformation("Model.Id = {Id}", _model?.Id);
    }
}

您也可以为Context <EditForm />声明一个不同的名称.您也可以显式地命名这两个上下文.这不重要只是名字不能一样.

有关更详细的解释,请查看

Csharp相关问答推荐

为什么使用DXGI输出复制和Direct 3D时捕获的图像数据全为零?

Dapper是否可以自动扩展类成员

EF Core判断是否应用了AsSplitQuery()

如何在Visual Studio代码中更改大括号模式{},用于C#语言

安装附加的. exe与Visual Studio

.NET 6控制台应用程序,RabbitMQ消费不工作时,它的程序文件中的S

TCPClient阅读流

Automapper 12.x将GUID映射到字符串

VS 2022 for ASP.NET Core中缺少自定义项模板

该函数不能检测两条曲线的交点

源代码生成器项目使用`dotnet build`编译,而不是在Visual Studio中编译?

如何在GRPC代码First服务的返回类型上使用多态性?

在C#ASP.NET内核中使用INT AS-1进行控制器场景的单元测试

发布.NET 8 Blazor WebAssembly独立应用程序以进行静态站点部署

多个选项卡上的MudForm验证

毛伊岛.NET 8图片不再适合按钮

C#USB条形码 scanner 在第二次扫描时未写入行尾字符

获取应用程序版本信息时出现奇怪信息

如何对构建在Clean架构和CQRS之上的控制器进行单元测试?

自定义ConsoleForMatter中的DI/Http上下文