C# Blazor: Как использовать @typeparam в Code позади? (с обходным путем) - PullRequest
6 голосов
/ 25 февраля 2020

В файле Blazor .razor вы можете использовать @typeparam MyType, чтобы использовать generi c параметры . Например:

MyComponent.razor

@typeparam MyType

<SomeHtml />

@code
{
    [Parameter]
    public List<MyType> MyList{ get; set; }
}

Так что вы можете позвонить:

<MyComponent MyType="MyTypeABC" MyList="@MyData.MyList" />

Но я предпочитаю код позади (razor.cs ), как я могу использовать параметр для типа типа @typeparam MyType в файле razor.cs?

Мой текущий обходной путь :

MyComponent.razor

@inherits MyComponentCode<MyType>
@typeparam MyType

MyComponent.razor.cs

public class MyComponentCode<MyType> : ComponentBase
{
    [Parameter]
    public List<MyType> MyList{ get; set; }
}

Я пропускаю что-то вроде [TypeParameter], но, может быть, есть лучшие решения, есть идеи? Или, может быть, это общий вопрос о том, «как использовать razor @statements в коде позади».


Обновление с 2020-02-27:

С предложением Роджера Вольфа (см. Ниже), немного лучше:

MyComponent.razor

@typeparam MyType

MyComponent.razor.cs

public partial class MyComponent
{
    [Parameter]
    public List<MyType> MyList{ get; set; }
}

Вызов

<MyComponent MyType="MyTypeABC" />

1 Ответ

5 голосов
/ 26 февраля 2020

Вы были довольно близки, просто нужно добавить partial к определению класса:

using Microsoft.AspNetCore.Components;

namespace BlazorApp1.Components
{
    public partial class MyCustomComponent<T> : ComponentBase
    {
        [Parameter]
        public string Label { get; set; }
    }
}

Часть Razor:

@namespace BlazorApp1.Components
@typeparam T

<label>@($"{Label}. Provided type is {typeof(T).Name.ToUpper()}")</label>

Использование (Index.razor):

@page "/"
@using BlazorApp1.Components

<MyCustomComponent T="long" Label="Custom component label" />

Таким образом, вам не нужно наследовать свой компонент от него, так как оба становятся частями одного и того же класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...