Blazor говорит, что тип или имя пространства имен не существует в пространстве имен '__Blazor ...' - PullRequest
0 голосов
/ 05 мая 2019

Я играю с Blazor и пытаюсь создать небольшой компонент Grid. Я хотел бы пройти через конфигурации через простой объект. Компилятор выдает следующую ошибку:

GridComponent.razor.g.cs(61, 254): [CS0234] The type or namespace name 'GridComponentConfig' does not exist in the namespace '__Blazor.Spa.Shared.Components.Grid' (are you missing an assembly reference?)

Файлы бритвы и cs находятся в одном каталоге.

<GridComponent data=@modules TItem="Module" Config=@GridComponentConfig></GridComponent>

@functions
{   
    protected GridComponentConfig GridComponentConfig = new GridComponentConfig
    {
        Columns = new List<string>
        {
            "id", "name", "description", "moduleroute"
        }
    };
}

Что я здесь не так делаю?

GridComponent.razor

@using Microsoft.AspNetCore.Components
@typeparam TItem

<table>
    <thead>
    <GridHeader Data=@Data Config=@Config></GridHeader>
    </thead>
    <tbody>
    </tbody>
    <tfoot></tfoot>
</table>

@functions
{

    [Parameter]
    public IEnumerable<TItem> Data { get; set; }

    [Parameter]
    public GridComponentConfig Config { get; set; }

}

GridHeader.razor

@using Microsoft.AspNetCore.Components
@typeparam TItem

<tr>
    @foreach (string column in Config.Columns)
    {
        <td>@column</td>
    }
</tr>

@functions
{

    [Parameter]
    public IEnumerable<TItem> Data { get; set; }

    [Parameter]
    public GridComponentConfig Config { get; set; }

}

GridComponentConfig.cs

using System.Collections.Generic;

namespace Spa.Shared.Components.Grid
{
    public class GridComponentConfig
    {
        public IEnumerable<string> Columns { get; set; }
    }
}

Исправить попытку 1:

Pages/Components/Grid/GridComponent.razor
Pages/Components/Grid/GridHeader.razor
Common/GridComponentConfig.cs

@using s исправлены соответственно, пример ниже, от Rider.

GridComponent.razor

@using Microsoft.AspNetCore.Components
@using Spa.Common
@typeparam TItem

<table>
    <thead>
    <GridHeader Data=@Data Config=@Config></GridHeader>
    </thead>
    <tbody>
    </tbody>
    <tfoot></tfoot>
</table>

@functions
{

    [Parameter]
    protected IEnumerable<TItem> Data { get; set; }

    [Parameter]
    protected GridComponentConfig Config { get; set; }

}

GridHeader.razor

@using Microsoft.AspNetCore.Components
@using Spa.Common
@typeparam TItem

<tr>
    @foreach (string column in Config.Columns)
    {
        <td>@column</td>
    }
</tr>

@functions
{

    [Parameter]
    public IEnumerable<TItem> Data { get; set; }

    [Parameter]
    public GridComponentConfig Config { get; set; }

}

Результат

GridComponent.razor.g.cs(57, 231): [CS0234] The type or namespace name 'Common' does not exist in the namespace '__Blazor.Spa' (are you missing an assembly reference?)

Исправить попытку 2:

Pages/Components/Grid/GridComponent.razor
Pages/Components/Grid/GridHeader.razor
Pages/Components/Grid/GridComponentConfig.cs

Значения @using зафиксированы соответствующим образом, пример ниже, от Rider.

GridComponent.razor

@using Microsoft.AspNetCore.Components
@typeparam TItem

<table>
    <thead>
    <GridHeader Data=@Data Config=@Config></GridHeader>
    </thead>
    <tbody>
    </tbody>
    <tfoot></tfoot>
</table>

@functions
{

    [Parameter]
    protected IEnumerable<TItem> Data { get; set; }

    [Parameter]
    protected GridComponentConfig Config { get; set; }

}

GridHeader.razor

@using Microsoft.AspNetCore.Components
@typeparam TItem

<tr>
    @foreach (string column in Config.Columns)
    {
        <td>@column</td>
    }
</tr>

@functions
{

    [Parameter]
    public IEnumerable<TItem> Data { get; set; }

    [Parameter]
    public GridComponentConfig Config { get; set; }

}

Результат

GridComponent.razor.g.cs(56, 253): [CS0234] The type or namespace name 'GridComponentConfig' does not exist in the namespace '__Blazor.Spa.Pages.Components.Grid' (are you missing an assembly reference?)

Обновление

  • похоже, я хочу что-то другое, чем может сделать Blazor / Razor GridComponent может принимать объект конфигурации в качестве параметра. Но если я хочу передать тот же объект конфигурации компоненту GridHeader, тогда возникает ошибка компиляции. Мне нужно копать глубже.

1 Ответ

0 голосов
/ 05 мая 2019

У вас должна быть папка с именем Страницы , в которой вы храните файлы компонентов.Не храните файлы других типов в этой папке.

Определите папку с именем Grid, в которую следует переместить файл GridComponentConfig.cs

В своем файле GridComponent.razor добавьте @using Spa.Shared.Components.Grid в верхней части страницы.

Надеюсь, это поможет ...

...