【问题标题】:Blazor how to pass arguments to onclick function?Blazor 如何将参数传递给 onclick 函数?
【发布时间】:2019-01-21 21:00:56
【问题描述】:

我想做按钮onclick 需要一些输入的功能。

<button onclick="@test(123, 456)">Check</button>

@functions
{
    public void test(int a, int b)
    {
        Console.WriteLine(a + b);
    }
}

但由于某种原因,它会引发错误:

Argument "1": Cannot convert from void to string

稍后我想在 for 循环中创建这些按钮

@for (int i = 0; i < 10; i++)
{
    <button onclick="@test(i, 5 * i)">Check</button>
}

我怎样才能做到这一点?

【问题讨论】:

  • 看起来你需要在你的函数上有一个返回类型,尝试将 void 更改为字符串
  • @DalTron 我将 void 更改为字符串并添加了“return a” - 现在 onClick 按钮显示在控制台 ReferenceError: a is not define 上,刷新页面后它显示 579 这是 123+456 但为什么?跨度>
  • 它是否适用于 lambda? @for (int i = 0; i test(i, 5 * i))">检查 }
  • @bcwhims 完美!请把它写成答案!

标签: c# blazor


【解决方案1】:

用 lambda 试试。您将 onclick 绑定到函数的结果而不是函数本身。

@for (int i = 0; i < 10; i++)
{
    var buttonNumber = i;
    <button @onclick="@(e => test(buttonNumber, 5 * buttonNumber))">Check</button>
}

【讨论】:

【解决方案2】:

我试过这个并且成功了

@onclick="(() => FunctionName(argument))"

喜欢

@onclick="(() => GetDetail(item.UserId))"

https://github.com/aspnet/AspNetCore/issues/15956 得到想法。

【讨论】:

  • @onclick="() =&gt; FunctionName(argument)" 也可以,不需要额外的括号
【解决方案3】:

onclick 上的 Sign 指定它是 C# 函数:

@onclick = "@(() => test(i, 5*i))"

【讨论】:

  • 虽然代码没问题,但解释毫无意义。代码中没有与号 (&)。
  • 我说的是“At”而不是“Amper”;)
【解决方案4】:
<input type="button" @onclick="@(() => functionname(paramvalue))" class="....." value="DoSomething" />

【讨论】:

    【解决方案5】:

    以下输入以及键入的按钮都对我有用。

    <td>
        <input type="button" class="btn btn-primary" value="Delete"
        @onclick="(() => this.DeleteTodoItem(todoItem.Id))"  />
    </td>
    <td>
        <button class="btn btn-primary" 
        @onclick="(() => this.DeleteTodoItem(todoItem.Id))">Delete</button>
    </td>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-18
      • 2017-02-05
      • 1970-01-01
      • 2022-08-19
      • 2019-04-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      相关资源
      最近更新 更多