Ste*_*ers 1 generics razor blazor
我在 Blazor 中有一个组件,它采用参数“TItem”,该参数可以是任何对象:
员工.razor
@page "/Employees"
<GenericGrid TItem="Employee" MaintainState="true"></GenericGrid>
@code
{
}
Run Code Online (Sandbox Code Playgroud)
上面的组件是 Telerik 网格组件的包装器。这样,我可以使用相同的网格组件来显示来自不同对象的数据,具体取决于我传递给它的对象(员工、客户等)
GenericGrid.razor(仅显示相关代码)
@typeparam TItem
...grid layout...
<GridToolBar>
<GridCommandButton Icon="add">New @typeof(TItem).Name</GridCommandButton>
</GridToolBar>
...rest of grid layout...
@code {
...
[Parameter]
public TItem Entity { get; set; }
...
Run Code Online (Sandbox Code Playgroud)
单击按钮时,我想将用户发送到另一个页面。该页面应该包含一个表单,用于创建我传递给它的任何对象。然而,第一个障碍是首先能够将对象发送到另一个页面。路由参数仅支持字符串和整数等内容,因此这不是一个选项。
我发现了以下 StackOverflow 问题:c# blazor how to pass a List to a page。接受的解决方案看起来像是一个可行的选择,但我无法思考如何为我的案例实现这一点。
简单的解决方案是使用State. 假设您有 2 个页面Employees&EmployeeDetail多个页面,并且您需要将员工对象从 传递Employees给EmployeeDetail。
应用程序状态.cs
public class AppState
{
public Employee Employee { get; set; }
}
public class Employee
{
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
并且您需要将 AppState 注册为您的 program.cs 中的范围
services.AddScoped<AppState>();
Run Code Online (Sandbox Code Playgroud)
员工.razor
@page "/employees"
@inject AppState AppState
@inject NavigationManager NavigationManager
<button @onclick="NavigateToEmployeeDetail">Send Employee</button>
@code{
private void NavigateToEmployeeDetail()
{
//set the employee object before navigating
AppState.Employee = new Employee { Name = "Employee1" };
NavigationManager.NavigateTo("/employeedetail");
}
}
Run Code Online (Sandbox Code Playgroud)
EmployeeDetail.razor
@page "/employeedetail"
@inject AppState AppState
<h1>Employee Name : @EmployeeName</h1>
@code{
public string EmployeeName { get; set; }
protected override void OnInitialized()
{
if (AppState.Employee is null) return;
EmployeeName = AppState.Employee.Name;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2872 次 |
| 最近记录: |