【问题标题】:Passing data to a modal in Blazor将数据传递给 Blazor 中的模式
【发布时间】:2021-06-22 09:44:42
【问题描述】:

有没有办法使用 Razor 语法将多个数据从一个页面传输到一个模式?示例 我有一个包含多列和多行的表。在其中一列中有一个按钮,您可以使用它来编辑数据。我希望将此行中的数据传输到模态中,以便我可以对其进行编辑。

【问题讨论】:

标签: html razor blazor


【解决方案1】:

一种可能性是在一个页面中完成所有操作:网格和对话框。 (这个对话框肯定是一个 div)。

@page "/{Langue}/OrderList"
<div class="content">
    <div class="container">
        <Components.Grid 
                    Id="grid-order-list"
                    ListViewRecords = "new List<int> { 20, 50, 100 }"/>
    </div>
</div>

@if (LineDetails != null)
{
    <!-- Modal Large -->
    <div class="modal fade" id="large-modal">
        <div class="modal-dialog modal-lg">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal"><i class="fa fa-times"></i></button>
                    <h6 class="modal-title">@ModalTitle</h6>
                </div>
                <div class="modal-body text-center">
                    <div class="modal-body-inside" style="height: 85vh; overflow-y: auto; padding: 60px 50px 70px;">
                        <UserControls.LineDetail Source="LineDetails " />
                    </div>
                </div>
            </div>
        </div>
    </div>
    <!-- /.modal -->
}

@code {
private MyNameSpace.LineDetailsClass LineDetails;
}

如您所见,只要LineDetails 为空,用户就只能看到表格。单击详细信息按钮时,您必须填充LineDetails。因此将显示模态。 LineDetails 应该绑定到一些文本框,...当用户单击模式中的按钮时,您会在 LineDetails 中获得所需的信息并将其重置为 null。

【讨论】:

  • 请不要破坏您自己的帖子。当您在此处发帖时,您授予 SO 根据 CC-by SA 4.0 分发内容的权利。任何破坏行为都将被撤销。
【解决方案2】:

假设你的类名是 Person,它就是你的 Button 代码:

foreach(var item in Items)
{
...
<td><button type="button" @onclick="@Update(item)">Edit</button></td>
...
}

现在我们有一个这样的选定项目模型:

@code{

Person SelectedItem {get;set;}

void Update(Person selectedItem)
{
SelectedItem  = selectedItem;
}

现在您可以在任何地方访问您的 SelectedItem,包括模式。

【讨论】:

  • 或者只是&lt;button type="button" @onclick="()=&gt;SelectedItem = item"&gt;
【解决方案3】:

Guy、Henk 和 Ali 都有正确的想法。 不过,我想补充一点,您可以将 @onclick 添加到几乎任何东西——一个 div、一个表格行等。

一般模式是有一个List&lt;SomeClass&gt; AllItems,然后是一个SomeClass SelectedItem,然后是一个空检查。

YourModalControl.razor

<div>Show something from SelectedItem: @SelectedItem.DisplayString</div>
<button @onclick="CloseMe">Close</button>
@code{
    [Parameter]
    public SomeClass SelectedItem {get; set;}
    
    [Parameter]
    public EventCallback<SomeClass> SelectedItemChanged{get; set;}
    
    async Task CloseMe(){
        SelectedItem = null;
        SelectedItemChanged.InvokeAsync(SelectedItem);
    }
}

ConsumingPage.razor

@if (SelectedItem is not null){
    <YourModalDisplayControl @bind-SelectedItem="SelectedItem" />
}
@else foreach (var item in AllItems){
    <div @onclick="()=> SelectedItem = item">@item.DisplayString</div>
} 

@code {
    List <SomeClass> AllItems {get; set;}
    SomeClass SelectedItem {get; set;}
}

【讨论】:

    猜你喜欢
    • 2022-01-05
    • 2020-12-01
    • 2013-07-21
    • 2020-09-22
    • 2014-12-12
    • 2020-09-11
    • 2021-01-18
    • 2016-01-22
    • 1970-01-01
    相关资源
    最近更新 更多