较新的答案
您现在可以使用<DynamicComponent Type=@myType Parameters=@myParameterDictionary />
where myParameterDictionary
is a Dictionary<string, object>
/
原答案
创建 .cs 文件,而不是使用 .razor 文件。
在文件中创建你的类public class MyComponent: ComponentBase
然后重写BuildRenderTree
NOTE: 你需要添加?
之后Dictionary<string, object
and RenderFragment
在以后的版本中表明它们可以为空。
protected override void BuildRenderTree(RenderTreeBuilder builder)
{
builder.OpenElement(0, YourParameter);
builder.CloseElement();
}
如果您不确切知道如何使用 RenderTreeBuilder,只需创建一个临时 razor 文件并创建您想要的标记,然后查看obj\Debug\netstandard2.1\Razor\
如果你想在一个.razor
文件,然后您可以创建如下所示的组件
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Rendering;
using System;
using System.Collections.Generic;
using System.Linq;
namespace BlazorApp118.Shared
{
public class Dynamic : ComponentBase
{
[Parameter]
public string Tag { get; set; }
[Parameter]
public Dictionary<string, object> AdditionalAttributes { get; set; }
[Parameter]
public RenderFragment ChildContent { get; set; }
protected override void BuildRenderTree(RenderTreeBuilder builder)
{
if (string.IsNullOrWhiteSpace(Tag))
throw new ArgumentNullException(nameof(Tag));
builder.OpenElement(0, Tag);
if (AdditionalAttributes?.Any() == true)
builder.AddMultipleAttributes(1, AdditionalAttributes);
if (ChildContent != null)
builder.AddContent(2, ChildContent);
builder.CloseElement();
}
}
}
然后像这样使用它
<Dynamic Tag="a" AdditionalAttributes=@SomeDictionaryOfValues>
Any content you want here
</Dynamic>