在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-02-27更新:
在罗杰·沃尔夫(见下文)的建议下,一种更好的方法:
MyComponent.razor
@typeparam MyType
MyComponent.razor.cs
public partial class MyComponent<MyType>
{
[Parameter]
public List<MyType> MyList{ get; set; }
}
致电
<MyComponent MyType="MyTypeABC" />
答案 0 :(得分:11)
您非常接近,只需要在类定义中添加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" />
这样,您就不需要继承它的组件,因为它们都成为同一个类的一部分。