c# - Blazor 选定 Row 参数传递

标签 c# html razor blazor

我在这里创建了一个表格,并希望将所选参数传输到标题区域中的组件。

enter image description here

UserList.razor

<RadzenDataGrid Data="@usermodel"
                TItem="Userlistmodel"
                @bind-Value="@selectedUser"
                RowSelect=@RowSelect>
<Columns>
 <RadzenDataGridColumn TItem="Userlistmodel" Property="PNRUID" Title="PNRUID" Width="120px" />
 <RadzenDataGridColumn TItem="Userlistmodel" Property="PNR" Title="PNR" Width="120px" />
 <RadzenDataGridColumn TItem="Userlistmodel" Property="Nachname" Title="Nachname" Width="170px" />
 <RadzenDataGridColumn TItem="Userlistmodel" Property="Vorname" Title="Vorname" Width="170px" />
 <RadzenDataGridColumn TItem="Userlistmodel" Property="Geburtsdatum" Title="Geburtsdatum" /></Columns>
</RadzenDataGrid>

 <RadzenCard Style="margin-bottom:20px">
     User:
     <b>@selectedUser.FirstOrDefault()?.Nachname</b>
 </RadzenCard>

@code{

public IList<Userlistmodel>? selectedUser { get; set; }

void RowSelect( Userlistmodel userlistmodel )
{
    Console.WriteLine( userlistmodel.Nachname );
}
}

我尝试了以下方法来传输标题区域中的数据(Nachname)。仍然缺少一些东西。组件(UserInfo.razor)在 header 区域中实现。

UserInfo.razor

@using LMERP.AppAdmin.Shared.Models.UserMgmt

<div class="col d-flex justify-content-end">
    <h3>Header area</h3>
    <div class="col-1">
        <RadzenIcon Icon="account_box" Class="icon-s icon-outline icon-header-1 hidden-1 mt-header" />
    </div>
    <div class="col-1 pl-2">
        <div class="text div-header-1 hidden-2">
            <b>User:</b>
            @if ( selectedUser?.Any() == true )
            {
                foreach ( var role in selectedUser )
                {
                    <p class="mb-0">@role.Nachname</p>
                }
            }
            else
            {
                <p class="mb-0">Select Name</p>
            }
            </div>
    </div>
</div>

@code {
    [Parameter]
    public string Nachname { get; set; }

    [Parameter]
    public IList<Userlistmodel>? selectedUser { get; set; }

}

它也不适用于 CascadingValue。

最佳答案

您可以通过实现内存中状态容器服务来实现此目的,如 here 中所述。 .

创建一个StateContainer类。

public class StateContainer
{
    private Userlistmodel? _selectedUser;

    public Userlistmodel? SelectedUser
    {
        get => _selectedUser;
        set
        {
            _selectedUser = value;
            NotifyStateChanged();
        }
    }

    public event Action? OnChange;

    private void NotifyStateChanged() => OnChange?.Invoke();
}

Program.cs 中注册为单例服务(或范围为 Blazor 服务器端)

builder.Services.AddSingleton<StateContainer>();

内部UserList.razor:

@inject StateContainer State

<RadzenDataGrid Data="@usermodel"
                TItem="Userlistmodel"
                @bind-Value="@selectedUser"
                RowSelect=@RowSelect>
<Columns>
 <RadzenDataGridColumn TItem="Userlistmodel" Property="PNRUID" Title="PNRUID" Width="120px" />
 <RadzenDataGridColumn TItem="Userlistmodel" Property="PNR" Title="PNR" Width="120px" />
 <RadzenDataGridColumn TItem="Userlistmodel" Property="Nachname" Title="Nachname" Width="170px" />
 <RadzenDataGridColumn TItem="Userlistmodel" Property="Vorname" Title="Vorname" Width="170px" />
 <RadzenDataGridColumn TItem="Userlistmodel" Property="Geburtsdatum" Title="Geburtsdatum" /></Columns>
</RadzenDataGrid>

 <RadzenCard Style="margin-bottom:20px">
     User:
     <b>@selectedUser.FirstOrDefault()?.Nachname</b>
 </RadzenCard>

@code{

    public IList<Userlistmodel>? selectedUser { get; set; }

    void RowSelect( Userlistmodel userlistmodel )
    {
        Console.WriteLine( userlistmodel.Nachname );
        State.SelectedUser = userlistmodel;
    }
}

以及UserInfo.razor

@implements IDisposable
@inject StateContainer State

@if (State.SelectedUser != null)
{
    <p>@State.SelectedUser.Nachname</p>
}

@code {
    protected override void OnInitialized()
    {
        StateContainer.OnChange += StateHasChanged;
    }

    public void Dispose()
    {
        StateContainer.OnChange -= StateHasChanged;
    }
}

关于c# - Blazor 选定 Row 参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77058566/

相关文章:

php - 调整注销功能以处理 Safari 后退按钮问题

c# - 简化的 "Razor-Only"网站?

asp.net-mvc - 如何在我的 ASP.NET MVC 后端和我的backbone.js 前端之间共享模板?

c# - 反序列化 xml 返回空

html - 如何在向前移动时倒置元素?

c# - 我应该如何保存我的数据?

jquery - 单击时显示和隐藏 div

c# - 从 html 助手中获取未编码的 html

c# - SAML 与 ASP.NET Core Identity 的集成

c# - 如何根据顺序排序