【问题标题】:Blazor button onclick event is never called永远不会调用 Blazor 按钮 onclick 事件
【发布时间】:2019-12-22 13:35:33
【问题描述】:

我有一个新的 Blazor 项目,我添加了 2 个按钮:

1 - 普通按钮 2 - MatBlazor 按钮

我尝试在点击事件上调用一个简单的方法,但没有任何作用!

        <MatButton OnClick="@(() => Logout())" Icon="exit_to_app" Label="Log out" />
        <MatButton OnClick="@OnClickHandler" Icon="exit_to_app" Label="Log out 2" />
        <button @onclick="@OnClickHandler">Log out 3</button>

@code {

    public void OnClickHandler(MouseEventArgs e)
    {
        NavigationManager.NavigateTo("/Account/Logout");
    }

    //public void Logout(/*MouseEventArgs e*/)
    public async Task Logout()
    {
        NavigationManager.NavigateTo("/Account/Logout");
    }

}

我尝试了很多组合,但现在方法都没有被调用!

【问题讨论】:

  • 你确定这些方法不起作用吗?已经设置断点了吗?
  • 为什么 MouseEventArgs 在按钮点击中?但基本上它们应该都可以工作,至少底部的一个。我不知道 MatButton。
  • 我把我的样本放在下面,我测试了 4 个案例,它们都有效
  • 您的公共异步任务 Logout() 没有等待,无法编译
  • @HieuLe - 它会编译(和运行),尽管会出现警告。

标签: asp.net asp.net-core blazor


【解决方案1】:

标准版是

  <button @onclick="Logout">Log out 3</button>`

...

public async Task Logout()
{
    NavigationManager.NavigateTo("/Account/Logout");
}

如果这不起作用,NavigateTo() 可能有问题

首先在 Logout() 中放置一个断点来验证它是否被调用。

【讨论】:

    【解决方案2】:

    我这边一切正常。我创建了一个新的 .Net Core 3.1 LTS 项目

    <p>Current count: @currentCount</p>
    
    <button class="btn btn-primary" @onclick="OnClickHandler">Click me</button>
    <button class="btn btn-primary" @onclick="()=> IncrementCount()">Click me 2</button>
    <button class="btn btn-primary" @onclick="@OnClickHandler">Click me 3</button>
    
    <button class="btn btn-primary" @onclick="@(() => IncrementCount())">Click me 4</button>
    
    @code {
        private int currentCount = 0;
    
        public void IncrementCount()
        {
            currentCount++;
        }
    
        public Task OnClickHandler(MouseEventArgs e)
        {
            currentCount++;
    
             return Task.CompletedTask;
        }
    }
    

    【讨论】:

    • 谢谢,我已将此代码放入我的项目中,但没有任何工作!它应该与我的“设置”有关吗?有什么东西会破坏这种行为,对吧?
    • 为什么不创建一个全新的 blazor 项目?该项目中有一个计数器按钮。然后你可以尝试测试和比较
    【解决方案3】:

    我通过提供delegate来使用MatButton onClick属性

    <MatButton TrailingIcon="favorite" @onclick="@(async () => await AddItemtoShoppingCart(@item))" Label="add"></MatButton>
    

    下面是我的方法。

    @code {
    public async Task AddItemtoShoppingCart(FoodItem selectedItem)
        {
            selectedItem.AddedToCart = true;
        }
    }
    

    【讨论】:

      【解决方案4】:

      我必须添加这一行并且它起作用了:

      app.UseHttpsRedirection();
      

      【讨论】:

        猜你喜欢
        • 2020-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-03
        • 2020-06-06
        • 2021-11-11
        • 2018-07-01
        • 1970-01-01
        相关资源
        最近更新 更多