如何在单击按钮时将 ID 参数从一个组件传递到另一个组件?
How to pass an ID parameter to Blazorise modal on button click, from one component to another?
我是新手,我正在尽我所能地表述这个。有这么多新概念要掌握!有什么不明白的请告诉我
我正在制作一个待办事项应用程序作为练习。在页面加载时,我从数据库中获取待办事项并在 foreach 循环中迭代它们,每个待办事项都分配有一个 X 按钮用于删除。这很简单,但是为了修改待办事项文本,我想要一个更新按钮来调出 Blazorise 的模式弹出窗口,以使用它的输入字段。
我的问题是,对于每个按钮,我不知道如何将每个待办事项的 ID 传递到此模式中。对于删除按钮,我可以使用 foreach 循环的“todoItem.Id”变量,但由于 Blazorise 模态是另一个我不能使用的组件。
这是我的索引页的样子:
@page "/"
@using TodoApp.App.Components
<section class="todo-container">
@if (TodoItems != null)
{
@foreach (var todoItem in TodoItems)
{
if (todoItem.IsDone == false)
{
<div class="todo-item">
<p>@todoItem.Text</p>
<UpdatePopup OnTodoItemUpdated="UpdateAndLoad"></UpdatePopup>
<Button class="remove-btn" Clicked="(() => RemoveTodoItem(todoItem.Id))">X</Button>
</div>
}
}
}
</section>
<Popup OnTodoItemAdded="UpdateAndLoad"></Popup>
这个按钮在模式本身内部:<Button Clicked="@ShowModal">...</Button>
,我想做与删除按钮相同的事情,添加类似 () => UpdateTodoItem(todoItem.Id)
.
的内容
如何从 Index 组件中获取每个项目的 ID 并将其添加到 Modal 组件中的每个按钮?
您的解决方案存在多个问题。首先,您要为每个待办事项 (UpdatePopup
) 创建一个模式,这是非常低效的。您应该只创建一个更新模式并将其用于所有项目。
@page "/"
@using TodoApp.App.Components
<section class="todo-container">
@if (TodoItems != null)
{
@foreach (var todoItem in TodoItems)
{
if (todoItem.IsDone == false)
{
<div class="todo-item">
<p>@todoItem.Text</p>
<Button class="update-btn" Clicked="(() => updatePopupRef.Show(todoItem))">Edit</Button>
<Button class="remove-btn" Clicked="(() => RemoveTodoItem(todoItem.Id))">X</Button>
</div>
}
}
}
</section>
<UpdatePopup @ref="@updatePopupRef" OnTodoItemUpdated="UpdateAndLoad" />
<Popup OnTodoItemAdded="UpdateAndLoad" />
@code{
UpdatePopup updatePopupRef;
}
然后在 UpdatePopup
你有这样的东西:
void Show(TodoItem item)
{
this.Item = item; // use this to bind item values to input fields
modalRef.Show(); // you also need to have modalRef set with @ref attribute
}
还有剃须刀
<TextEdit @bind-Text="@Item.Name" />
PS。我没有测试过这段代码,但你应该有一个整体的想法:)
我是新手,我正在尽我所能地表述这个。有这么多新概念要掌握!有什么不明白的请告诉我
我正在制作一个待办事项应用程序作为练习。在页面加载时,我从数据库中获取待办事项并在 foreach 循环中迭代它们,每个待办事项都分配有一个 X 按钮用于删除。这很简单,但是为了修改待办事项文本,我想要一个更新按钮来调出 Blazorise 的模式弹出窗口,以使用它的输入字段。
我的问题是,对于每个按钮,我不知道如何将每个待办事项的 ID 传递到此模式中。对于删除按钮,我可以使用 foreach 循环的“todoItem.Id”变量,但由于 Blazorise 模态是另一个我不能使用的组件。
这是我的索引页的样子:
@page "/"
@using TodoApp.App.Components
<section class="todo-container">
@if (TodoItems != null)
{
@foreach (var todoItem in TodoItems)
{
if (todoItem.IsDone == false)
{
<div class="todo-item">
<p>@todoItem.Text</p>
<UpdatePopup OnTodoItemUpdated="UpdateAndLoad"></UpdatePopup>
<Button class="remove-btn" Clicked="(() => RemoveTodoItem(todoItem.Id))">X</Button>
</div>
}
}
}
</section>
<Popup OnTodoItemAdded="UpdateAndLoad"></Popup>
这个按钮在模式本身内部:<Button Clicked="@ShowModal">...</Button>
,我想做与删除按钮相同的事情,添加类似 () => UpdateTodoItem(todoItem.Id)
.
如何从 Index 组件中获取每个项目的 ID 并将其添加到 Modal 组件中的每个按钮?
您的解决方案存在多个问题。首先,您要为每个待办事项 (UpdatePopup
) 创建一个模式,这是非常低效的。您应该只创建一个更新模式并将其用于所有项目。
@page "/"
@using TodoApp.App.Components
<section class="todo-container">
@if (TodoItems != null)
{
@foreach (var todoItem in TodoItems)
{
if (todoItem.IsDone == false)
{
<div class="todo-item">
<p>@todoItem.Text</p>
<Button class="update-btn" Clicked="(() => updatePopupRef.Show(todoItem))">Edit</Button>
<Button class="remove-btn" Clicked="(() => RemoveTodoItem(todoItem.Id))">X</Button>
</div>
}
}
}
</section>
<UpdatePopup @ref="@updatePopupRef" OnTodoItemUpdated="UpdateAndLoad" />
<Popup OnTodoItemAdded="UpdateAndLoad" />
@code{
UpdatePopup updatePopupRef;
}
然后在 UpdatePopup
你有这样的东西:
void Show(TodoItem item)
{
this.Item = item; // use this to bind item values to input fields
modalRef.Show(); // you also need to have modalRef set with @ref attribute
}
还有剃须刀
<TextEdit @bind-Text="@Item.Name" />
PS。我没有测试过这段代码,但你应该有一个整体的想法:)