【问题标题】:C# Blazor: How to use @typeparam in Code behind? (with workaround)C# Blazor:如何在后面的代码中使用 @typeparam? (有解决方法)
【发布时间】:2020-06-09 02:53:57
【问题描述】:

在 Blazor .razor 文件中,您可以使用@typeparam MyType 来使用通用参数。 例如:

MyComponent.razor

@typeparam MyType

<SomeHtml />

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

所以你可以调用:

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

但我更喜欢后面的代码 (razor.cs),如何在 razor.cs 文件中使用像 @typeparam MyType 这样的类型的参数?

我目前的解决方法是:

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 年 2 月 27 日更新:

根据 Roger Wolf 的建议(见下文),更好的方法:

MyComponent.razor

@typeparam MyType

MyComponent.razor.cs

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

致电

<MyComponent MyType="MyTypeABC" />

【问题讨论】:

    标签: c# blazor


    【解决方案1】:

    你已经很接近了,只需要在类定义中添加partial

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

    剃刀部分:

    @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" />
    

    这样,您就不需要从它继承您的组件,因为它们都成为同一个类的一部分。

    【讨论】:

    • 谢谢,不是我想要的(.cs 文件中的 typeparam),但是partial class MyComponent@inherits MyComponent 好。在这种情况下,您还可以删除 ComponentBase (: ComponentBase) 的继承,因为 Component 本身已经是 ComponentBase ;),这意味着您仍然可以使用 protected override void OnInitialized() 之类的方法。
    猜你喜欢
    • 2020-07-08
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多