逐一给出 8 种方式的最小示例(均为 Blazor):
- 组件参数(
[Parameter])
<!-- Parent.razor -->
<MyComp Title="Hello" Count="1" />
@* MyComp.razor *@
@code {
[Parameter] public string? Title { get; set; }
[Parameter] public int Count { get; set; }
}
- 子内容参数(
RenderFragment)
<!-- Parent.razor -->
<MyCard>
<p>内容</p>
</MyCard>
@* MyCard.razor *@
<div class="card">@ChildContent</div>
@code {
[Parameter] public RenderFragment? ChildContent { get; set; }
}
- 路由参数(
@page+[Parameter])
@page "/user/{Id:int}"
<h3>@Id</h3>
@code {
[Parameter] public int Id { get; set; }
}
- 查询字符串参数(
[SupplyParameterFromQuery])
@page "/list"
<h3>Sort: @Sort</h3>
@code {
[SupplyParameterFromQuery] public string? Sort { get; set; }
}
- 表单参数(
[SupplyParameterFromForm],.NET 8+)
razor
@page "/submit"
@using Microsoft.AspNetCore.Components.Forms
<EditForm FormName="profile">
<InputText name="Name" />
</EditForm>
@code {
[SupplyParameterFromForm] public string? Name { get; set; }
}
- 级联参数(
[CascadingParameter])
<!-- Parent.razor -->
<CascadingValue Value="Theme">
<Child />
</CascadingValue>
@code {
private string Theme = "Dark";
}
@* Child.razor *@
@code {
[CascadingParameter] public string? Theme { get; set; }
}
- 依赖注入(
@inject/[Inject])
@inject NavigationManager Nav
<button @onclick="Go">Go</button>
@code {
private void Go() => Nav.NavigateTo("/");
}
- 事件回调(
EventCallback)
<!-- Parent.razor -->
<MyComp OnSave="HandleSave" />
@code {
private Task HandleSave() => Task.CompletedTask;
}
@* MyComp.razor *@
<button @onclick="OnSave">Save</button>
@code {
[Parameter] public EventCallback OnSave { get; set; }
}