将数据传递给 Blazor 中的模态
Passing data to a modal in Blazor
有没有什么方法可以使用 Razor 语法将多个数据从一个页面传输到一个模式?示例 我有一个包含多个列和行的 table。在其中一列中有一个按钮,您可以使用它来编辑数据。我希望将此行中的数据传输到模态中,以便我可以对其进行编辑。
一种可能性是在一个页面中完成所有操作:网格和对话框。 (这个对话框肯定是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
为 null,用户就只能看到 table。单击详细信息按钮时,您必须填充 LineDetails
。因此将显示模态。 LineDetails
应该绑定到一些文本框,...当用户单击模式中的按钮时,您会在 LineDetails 中获得所需的信息并将其重置为空。
假设你的class名字是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,包括模式。
Guy、Henk 和 Ali 的想法都很正确。 不过,我想补充一点,您几乎可以将@onclick 添加到任何内容——div、table 行等
一般模式是有一个 List<SomeClass> 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;}
}
有没有什么方法可以使用 Razor 语法将多个数据从一个页面传输到一个模式?示例 我有一个包含多个列和行的 table。在其中一列中有一个按钮,您可以使用它来编辑数据。我希望将此行中的数据传输到模态中,以便我可以对其进行编辑。
一种可能性是在一个页面中完成所有操作:网格和对话框。 (这个对话框肯定是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
为 null,用户就只能看到 table。单击详细信息按钮时,您必须填充 LineDetails
。因此将显示模态。 LineDetails
应该绑定到一些文本框,...当用户单击模式中的按钮时,您会在 LineDetails 中获得所需的信息并将其重置为空。
假设你的class名字是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,包括模式。
Guy、Henk 和 Ali 的想法都很正确。 不过,我想补充一点,您几乎可以将@onclick 添加到任何内容——div、table 行等
一般模式是有一个 List<SomeClass> 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;}
}