c# - 如何在 Blazor 中将带有参数的 onclick 添加到按钮?

标签 c# razor blazor razor-pages blazor-server-side

我在 Blazor 服务器端应用程序中有以下代码:

<div class="table-responsive">
    <table class="table">
        <thead>
            <tr>
                <th>Email</th>
                <th>Name</th>
            </tr>
        </thead>
        <tbody>
            @foreach (var applicationUser in ApplicationUsers)
            {
                string userId = applicationUser.Id;
                Guid? personId = applicationUser.PersonId;

                <tr>
                    <td>@applicationUser.Email</td>
                    <td>@applicationUser.PersonName</td>
                    @if (personId != null)
                    {
                        <td>
                            <button class="btn btn-block btn-primary" @onclick="() => ShowEditPersonDialog(personId)" style="color: rgb(255, 255, 255); background-color: rgb(49, 56, 215);" @type="button">Edit Person</button>
                        </td>
                    }
                </tr>
            }
        </tbody>
    </table>
</div>
然而这:@onclick="() => ShowEditPersonDialog(personId)"...不起作用。由于它在组件上方加载,直到第一行上的第一个按钮(有 4 个用户 - 应加载 4 行),然后按钮无法正确呈现并引发未处理的异常:
Blazor application exception
我试过了:
  • @onclick="() => ShowEditPersonDialog(personId)" - 上面显示的异常
  • @onclick="(e) => ShowEditPersonDialog(e, personId)" - 上面显示的异常
  • @onclick="e => ShowEditPersonDialog(e, personId)" - 上面显示的异常
  • @onclick="@(e => ShowEditPersonDialog(e, personId))" - 上面显示的异常
  • @onclick="(e) => ShowEditPersonDialog(e)" - 上面显示的异常
  • @onclick="e => ShowEditPersonDialog(e)" - 上面显示的异常
  • @onclick="@(e => ShowEditPersonDialog(e))" - 上面显示的异常
  • @onclick="() => ShowEditPersonDialog()" - 上面显示的异常
  • @onclick=@"() => ShowEditPersonDialog(personId)" - 无法编译,语法错误
  • @onclick="@(() => ShowEditPersonDialog(personId))" - 上面显示的异常
  • onclick="() => ShowEditPersonDialog(personId)" - 编译、运行和渲染,但按钮没有响应
  • onclick="@(() => ShowEditPersonDialog(personId))" - 不编译 - 无法将 lambda 表达式转换为类型“对象”,因为它不是委托(delegate)类型
  • onclick="(e) => ShowEditPersonDialog(e, personId)" - 编译、运行和渲染,但按钮没有响应
  • onclick="e => ShowEditPersonDialog(e, personId)" - 编译、运行和渲染,但按钮没有响应
  • onclick="@((e) => ShowEditPersonDialog(e, personId))" - 不编译 - 无法将 lambda 表达式转换为类型“对象”,因为它不是委托(delegate)类型
  • onclick="@(e => ShowEditPersonDialog(e, personId))" - 不编译 - 无法将 lambda 表达式转换为类型“对象”,因为它不是委托(delegate)类型
  • onclick="@(e => ShowEditPersonDialog(e))" - 不编译 - 无法将 lambda 表达式转换为类型“对象”,因为它不是委托(delegate)类型

  • 我怎么写这个东西??我只是想要一个按钮将给定行的相关 personId 传递给 ShowEditPersonDialog 方法。

    最佳答案

    将您的按钮更改为此 - 删除 @来自 type="button"并使用 @onclick="@(() => ShowEditPersonDialog(personId))"

    <button class="btn btn-block btn-primary" 
        @onclick="@(() => ShowEditPersonDialog(personId))" 
        style="color: rgb(255, 255, 255); background-color: rgb(49, 56, 215);" 
        type="button">Edit Person</button>
    
    将内联按钮 css 样式移动到 css 文件中的类也很好,这样 HTML 标记更易于阅读:)

    关于c# - 如何在 Blazor 中将带有参数的 onclick 添加到按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63690894/

    相关文章:

    c# - C#如何在 Crystal 报表的一行中添加一个单词

    c# - 在 Swagger for ASP .NET Core 3.1 中为标题添加过滤器

    asp.net-mvc - 如何使用@Url.Action 从 AREA 的 cshtml 页面重定向到普通 Controller 的 ActionResult?

    razor - ASP.NET MVC 4 仅定义字符串的显示模板

    c# - Blazor Navigationmanager 取消位置上的导航已更改

    c# - 如何在 asp.net core rc2 中获取 Controller 的自定义属性

    c# - Xamarin.Forms:如何从 Web API 数据填充饼图?

    c# - 如何让MVC中的某个View不继承_Layout.cshtml?

    blazor - 使用带 bool 值的 InputRadio

    c# - 如何解决 "striped"表的 Blazor/Bootstrap 5 CSS 问题?