C#Blazor:如何在代码隐藏中使用@typeparam?(有变通方法)



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

MyComponent.rarzor

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

所以你可以打电话给:

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

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

我当前的解决方法是:

MyComponent.rarzor

@inherits MyComponentCode<MyType>
@typeparam MyType

MyComponent.rarzor.cs

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

我怀念[TypeParameter]这样的东西,但也许有更好的解决方案,有什么想法吗?或者,这可能是一个关于"如何在代码背后使用razor@语句"的一般问题。


2020-02-27更新:

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

MyComponent.rarzor

@typeparam MyType

MyComponent.rarzor.cs

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

呼叫

<MyComponent MyType="MyTypeABC" />

您非常接近,只需要将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>

用法(索引.剃须刀(:

@page "/"
@using BlazorApp1.Components
<MyCustomComponent T="long" Label="Custom component label" />

这样,您就不需要从中继承组件,因为两者都是同一类的一部分。

相关内容

  • 没有找到相关文章

最新更新