在后面的代码中设置RenderFragment默认内容

Hug*_* A. 2 c# blazor blazor-server-side

我将一篇文章中的以下代码放置在 .razor 文件中。如何将 wig-pig 代码部分转换为 .razor.cs 文件后面的代码?

[Parameter] public RenderFragment<TItem> ItemTemplate { get; set; }

protected override void OnParametersSet()
  {
    if (ItemTemplate == null)
    {
      ItemTemplate = (item) => @:@{ 
      <li @key=item>@item.ToString()</li>}
      ;
    }
}
Run Code Online (Sandbox Code Playgroud)

Hen*_*man 9

有点固执己见,但我认为你有点夸大了“代码隐藏概念”。

ItemTemplate 只能在标记部分中使用,我会选择(小)@code 部分:

@code {
  [Parameter] 
  public RenderFragment<TItem> ItemTemplate { get; set; } =
         item => @<li @key=item>@item.ToString()</li>;
}
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案,因为这就是实践和所有 MS 示例中的做法。在代码隐藏中构建模板仅适合最简单的模板或独特的用例。否则过于复杂,以后阅读和修改都困难。+1 (2认同)

Bri*_*ker 6

根据 Magoo 先生的评论:

    [Parameter]
    public RenderFragment<TItem> ItemTemplate { get; set; }
            = (TItem item) => (builder) =>
            {
                builder.OpenElement(0, "li");
                builder.SetKey(item);
                builder.AddContent(1, item.ToString());
                builder.CloseElement();
            };

Run Code Online (Sandbox Code Playgroud)