我们的按钮点击事件,基本上都是一个无参的方法或者是一个MouseEnvent方法。

这里以BootstrapBlazorButton为例,它的点击回调是这样的:

EventCallback<MouseEventArgs>

下面我们来看一个例子:

首先定义一个Foo作为内容

public class Foo
{
public int Id { get; set; } public string Name { get; set; }
}

然后我们在OnInitialized中给一个初始值

protected override void OnInitialized()
{
base.OnInitialized();
Foos = new List<Foo>()
{
new Foo()
{
Name = "a"
},
new Foo()
{
Name = "b"
},
new Foo()
{
Name = "c"
},
new Foo()
{
Name = "d"
},
new Foo()
{
Name = "e"
},
new Foo()
{
Name = "f"
}
};
}

我们再创建一个无参的Callback方法

private async Task Callback()
{
await MessageService.Show(new MessageOption()
{
Content = "点击了按钮"
});
}

最后我们在razor文件中循环生成一个列表

@foreach (var foo in Foos)
{ <Button OnClick="Callback">@foo.Name</Button>
}

这时候我们看到的Button大概是这样的

这时候,一个Callback显然很难实现我们的需求。因为我们无法区分究竟点击是哪个按钮,不管点击哪个按钮,我们都只能输出固定的内容。

这时候怎么办呢,我们可以用一个简单的lambda表达式来生成一个匿名方法传参。

首先我们改造一下我们的Callback,加一个参数接收我们的foo.Name

private async Task Callback(string name)
{
await MessageService.Show(new MessageOption()
{
Content = $"点击了按钮{name}"
});
}

这个时候,我们的按钮就会报错,因为按钮的OnClick方法并没有一个参数为字符串的重载,所以我们需要改造一下我们的Button,用lambda做一个匿名方法出来调用它。

@foreach (var foo in Foos)
{ <Button OnClick="() => { Callback(foo.Name);}">@foo.Name</Button>
}

这样我们就能轻松的将名字传到对应的方法里使用了。

Blazor 小技巧之 lambda传参的更多相关文章

  1. 微信小程序开发小技巧——单击事件传参、动态修改样式、轮播样式修改等

    一. 脚本部分: 1. 表达式无效的处理: 如果你发现自己编写的表达式无效或者数据不展示,那么请先检查你的表达式是否有添加{{}},小程序中全部都要添加的,只要是在模板中调用js中的数据 2. 获取元 ...

  2. 微信小程序页面返回传参的问题

    比如提交问题,然后需要返回之前页面,由于onLoad只会加载一次,所以不会触发,但是我们页面又需要刷新,那怎么办? 1.onLoad与onShow区别 onLoad:监听页面加载.一个页面只会调用一次 ...

  3. 原生微信小程序跳转传参 : [非TabBar跳转传参] 和 [TabBar跳转传参]

    一般常用的微信小程序跳转分为两种 1.非TabBar跳转 2.TabBar跳转 1.非TabBar跳转 非TabBar页面的跳转通常使用wx.navigateTo来跳转页面,在链接后面加 ? 传参,如 ...

  4. 微信小程序wx.switchTab传参问题

    业务背景:从提问跳到列表需要刷新,以显示刚提交的数据. 但是官方文档 wx.switchTab 明确指明路径后是不能带参数的,怎么办? 网上有很多解决方案是:switchTab成功跳转后调用succe ...

  5. 微信小程序~跳页传参

    [1]需求: 点击商品,跳到相应商品详情页面 [2]代码: (1)商品列表页 <view class="goodsList"> <view wx:for=&quo ...

  6. 微信小程序跳转传参参数丢失?

    垂死病中惊坐起,笑问 Bug 何处来?! 1.先是大写字母作祟 前两天发布了「柒留言」v2.0.0 新版本,结果...你懂的嘛,没有 Bug 的程序不是好程序,写不出 Bug 的程序员不是好程序员. ...

  7. 小程序组件--> 组件传参

    小程序组件,在components文件夹右击-->创建文件夹-->右击-->新建component即可 创建一个组件 如果多个地方需要使用到,可以在app.json中加入一下代码,相 ...

  8. javascript之小积累-获取url传参的值

    在项目中经常遇到两个页面传值的情况,我采取的方案是通过url后面加参数,也就是get方式传值. 这个方式的优点是:传值.获取很方便. 缺点是:1. 把参数都暴露在浏览器中了,一些敏感信息不建议这样传: ...

  9. 微信小程序之页面传参

    效果图: 点击编辑值传过去了,那么编辑支出类型这个界面又是如何获取到值呢? 传值代码: type.js editType: function (e) { var typeId = e.currentT ...

  10. 微信小程序 wx.navigateTo()传参及多个参数方法

    var workModeAndPriceList = res.data.data.workModeAndPriceList; //var result = JSON.stringify(workMod ...

随机推荐

  1. 五子棋AI:实现逻辑与相关背景探讨(上)

    绪论 本合集将详细讲述如何实现基于群只能遗传算法的五子棋AI,采用C++作为底层编程语言 本篇将简要讨论实现思路,并在后续的文中逐一展开 了解五子棋 五子棋规则 五子棋是一种经典的棋类游戏,规则简单却 ...

  2. CSS – background and styling img

    前言 之前写过一些: W3Schools 学习笔记 (2) – CSS Image Sprites W3Schools 学习笔记 (3) – CSS Styling Images & CSS ...

  3. Asp.net core 学习笔记 ( 小东西 )

    简单的为 url 添加 query var parametersToAdd = new System.Collections.Generic.Dictionary<string, string& ...

  4. @RequestBody注意事项

    使用@RequestBody注解时,是用于接收Content-Type为application/json类型的请求,数据类型是JSON:{"aaa":"111" ...

  5. USB协议基础篇

    初次接触USB的同学,可能会被里面各种名词给搞晕,下面就来梳理一下这些知识,希望能帮助大家理解USB. 一,从最常见的名词说起 1.1 什么是USB 这个我就不多解释了,直译就是通用串行总线.再不明白 ...

  6. .Net 的扩展方法

    // 扩展方法 // ps:js中的扩展方法 比如 给数组定义一个自定义的全局的方法 使用 prototype (原型链) // .Net 给 string 添加一些扩展方法 String 是一个密封 ...

  7. KubeSphere DevOps 系统功能实战

    James,Java 工程师,喜欢学习和记录当下热门技术并验证其优势和缺点,以及当下火热的云原生解决方案的实施与推广. 前言 基于 Jenkins 的 KubeSphere DevOps 系统是专为 ...

  8. 麻将计分器微信小程序的开发

    如何开发微信小程序 前言 因为最近沉迷和朋友们一起下班去打麻将,他们推荐了一个计分的小程序,就不需要每局都转账或者用扑克牌记录了,但是这个小程序不仅打开有广告,各个页面都植入了广告,用起来十分不适. ...

  9. Bootstrap 栅栏布局中 col-xs-*、col-sm-*、col-md-*、col-lg-* 区别及使用方法 _2021-11-10

    Bootstrap 栅栏布局中 col-xs-.col-sm-.col-md-.col-lg- 区别及使用方法 全文转自:https://www.cnblogs.com/tangbohu2008/p/ ...

  10. .NET 9 AOT的突破 - 支持老旧Win7与XP环境

    引言 随着技术的不断进步,微软的.NET 框架在每次迭代中都带来了令人惊喜的新特性.在.NET 9 版本中,一个特别引人注目的亮点是 AOT( Ahead-of-Time)支持,它允许开发人员将应用程 ...