在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" />
这样,您就不需要从中继承组件,因为两者都是同一类的一部分。