@typeparam inputType
<div class="textbox">
@if(LabelTemplate!=null && TItem!=null)
@LabelTemplate(TItem)
<input type="text"/>
</div>
@code{
[Parameter]
public RenderFragment<inputType> LabelTemplate { get; set; }
[Parameter]
public inputType TItem { get; set; }
}
@typeparam inputType
,并接受该类型的对象作为参数TItem
。LabelTemplate
,该模板接受类型为inputType
的对象。为了呈现此片段,我们调用@LabelTemplate
并传入我们的TItem
参数。<Textbox TItem="myPerson">
<LabelTemplate>
@context.Name
</LabelTemplate>
</Textbox>
<Textbox TItem="myPerson">
<LabelTemplate>
@context.PhoneNumber
</LabelTemplate>
</Textbox>
@code{
Person myPerson = new Person { Name = "Jane Doe", PhoneNumber = "999 999 9999" };
public class Person
{
public string Name { get; set; }
public string PhoneNumber { get; set; }
}
}
@implements ILabel
<div class="textbox">
<label>@Text</label>
<input type="text"/>
</div>
@code
{
[Parameter]
public string Text { get; set; }
}
ILabel.cs
public interface ILabel
{
string Text { get; set; }
}
我知道可能已经晚了,但是我刚刚克服了这个问题,发现它非常容易解决!想为正在寻找答案的人提供一个简单的答案。
这是我的OrdersNavigation.razor文件(我想将其嵌入到标题中):
<div class="nav-strip">
<NavLink href="orders">
<Icon Name="@Icons.Cart" /> List
</NavLink>
<NavLink href="orders/create">
<Icon Name="@Icons.Plus" /> Create
</NavLink>
</div>
<div class="page-header">
<h3>@Title</h3>
@Navigation
</h3>
<hr />
@code {
[Parameter] public string Title { get; set; } = "[TITLE]";
[Parameter] public RenderFragment Navigation { get; set; }
}
请注意,导航属性是一个RenderFragment - 这非常关键。现在在我的页面中,我可以像这样简单地添加它:
<PageHeader Title="Orders">
<Navigation>
<OrderNavigation />
</Navigation>
</PageHeader>
在这里,您可以看到像往常一样输入了Title参数,但是Navigation参数是作为PageHeader的一个元素来输入的!实际上,您可以将任何内容放在标签中,并且它会在您使用@ Navigation的地方呈现。
对您的示例进行了尝试:
Label.razor
<label>@Text</label>
@code {
[Parameter] public RenderFragment Text { get; set; }
}
TextBox.razor
<div class="textbox">
<Label>
<Text>
<div>
Embedded label <br />
You can even drop components in here!
</div>
</Text>
</Label>
<input />
</div>