C# Blazor: Как использовать динамический c @typeparam в Code позади? - PullRequest
2 голосов
/ 28 марта 2020

Я хотел бы знать, как можно вызвать компонент с @typeparam, который поступает с URL

Как это уже обсуждалось в C# Blazor: Как использовать @typeparam в коде позади? (с обходным решением) , я создал компонент, как это сделал Роджер Вулф в своем решении.

Raozor.cs с использованием 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 "/{typeName}"
@using BlazorApp1.Components

<MyCustomComponent T="@TypeName" Label="Custom component label" />
@code
{
    [Parameter]
    public string TypeName {get; set;}
}

Итак, Строка, где я пытаюсь установить Тип по свойство строки, которое я получаю в ошибке компилятора. (Я предполагаю, что внутренняя функция typeof () определит тип для класса компонента.) Он будет компилироваться, только если я использую фиксированный кодированный тип. :

e.g.: <MyCustomComponent T="long" Label="Custom component label" />

Что я хочу сделать, это извлечь параметр типа из URL. Есть идеи, чтобы получить эту работу?

1 Ответ

0 голосов
/ 28 марта 2020

Тип @typeparam выводится во время компиляции, и в вашем компоненте должен быть параметр типа T:

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

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

...