- 博客(74)
- 资源 (5)
- 问答 (1)
- 收藏
- 关注
原创 Blazor 自定义可重用基础组件之 Select 更新版
所以我这个Select只接受Value为string类型的值,把转换工作移到外面来,因为放到内部转换不是很可行。这个看看原生的InputSelect就明白了,它根本只给了个ChildContent,像option这些东西需要自己另外弄,遭到了很多人的吐槽。暴露在外边,就没有转换这个任务了,但写代码的任务更多了。上次的Select能用,但有缺陷,当值改变时,没有引发一个属于EditForm的值改变事件,就是说还没有连接到表单,功能不完善。
2023-08-01 10:54:07
497
原创 Blazor 自定义可重用基础组件之 Tab
Tab 组件可能很少用,这里只是为简化代码,故可能比较难看,但能用。TabItem也有限制为5个,如果超过则再自行增加。
2023-07-19 17:54:08
247
原创 Blazor 自定义可重用基础组件之 Dialog (Bootstrap Modal)
对话框是常用的组件之一,可以提供信息提示,也可以设置表单录入数据等。但是,Bootstrap Modal需要JS互操作,这个不太懂,只能绕过。
2023-07-17 00:35:15
841
原创 Blazor 自定义可重用基础组件之 限制输入日期范围的DateNullBox
DateTime 和 DateTime?很不好搞,它不像string和string?有默认的转换,只是string不能为null。如果将TValue设为DateTime,就不能绑定DateTime?属性,同样,设为DateTime?,也不能绑定DateTime属性。所以前面一篇文章只能适用于DateTime属性,兼容性差,只能另搞一个DateTime?
2023-07-11 14:25:55
261
原创 Blazor 自定义可重用基础组件之 限制输入日期范围的DateBox
输入日期是一个非常重要的基础组件,可能也需要限定日期范围。这里只对日期进行定义,即设定type="date",其他的不常用,就略去了。DateTime 是一个结构体,像int有为0的初始值一样,它有一个初始值{0001/1/1 0:00:00};所以麻烦就在这里,要么就设为DateTime?,可这与codefirst相冲突;要么设定初始值,未设定初始值,需要在OnValidSubmit中再去判断日期字段是否未输入,即还是等于它的初始值。
2023-07-11 01:32:09
377
原创 Blazor 自定义可重用基础组件之 限制输入值大小的NumberBox(InputNumber)
我们可能限制用户输入值范围,超出视为无效且引发错误,这就是设置最大值和最小值。NumberBox.razor在这里未作改动。数值类型有好几种,但设置最大和最小一般为int类型,如果有特殊需求,代码就要复杂一点。
2023-07-09 00:34:33
278
原创 Blazor 自定义可重用基础组件之 带标头排序的Table
实现点击标头按所在列值进行排序,是一个非常有用的功能,其他的UI一般搞得非常复杂,添加标志图标什么的,使得本就不宽裕的表格更加拥挤。我的思路是,点击所在列的标头部位,传递标头值,然后根据标头值来改变查询语句。因为并不是所有列都需要排序,需要有一个特征字符。以下是Table.razor。
2023-07-04 15:22:58
390
原创 Blazor 自定义可重用基础组件之 NumberBox(InputNumber)
只能输入数字的输入框,为避免命名冲突,先命名为NumberBox。
2023-07-03 17:27:11
266
原创 Blazor 自定义可重用基础组件之 TextBox(InputText)
这是一个带标签和验证信息的输入框,用起来很方便。为避免命名冲突,这里将InputText改名为TextBox,其实内部类型就是string。可能有人会说用反射获取标签,我认为上面这个代码非常明显地显示了这是哪个属性输入框,用反射反而查找起来不容易。注意,组件的总长不能大于上一级容器长度,否则标签会分行或断行。
2023-06-30 15:29:11
532
原创 Blazor 自定义可重用基础组件之 Table
Table 组件比较复杂,内容比较多。PaginatedList 代码以前贴过,这里只增加一个属性ItemCount。
2023-06-29 12:17:17
437
原创 Blazor 自定义可重用基础组件之 Select
Select 组件比较难做,因为它有确定类型为string 的显示值,还有不确定类型的返回值。首先需要一个专门的类作为其下拉列的返回值和显示值,其次因返回值的不确定性,需要进行转换来确定。第三,如果本身有初始值,Select 不像 CheckBox 那样简单的初始化。
2023-06-29 01:00:45
547
原创 Blazor 自定义可重用基础组件之 CheckBox
Blazor 原生提供的基础组件实在是一言难尽,这给许多Blazor UI公司很多机会。可是试用了不少如AntDisgen、BootstrapBlazor等,总会有一些难尽如意的地方。还是自己做丰衣足食吧。其中的class是引用Bootstrap v5.3.0的。
2023-06-28 20:42:19
500
原创 Blazor Server 客户端分页类
当数据小于1000条时,一般都把数据都传到客户端去处理,然后分页显示。如果不使用其他的付费或免费的东东,只能自己编写分页类。下面是适用于Blazor Server 客户端分页类,客户端不需要异步执行。
2023-06-25 21:46:26
302
原创 Blazor Server 如何从客户端上读取文件内容
一种方式是将文件上传到Server端进行读取,一种方式当然是直接在网页客户端读取后发送数据到Server端进行保存。考虑到Server端的安全性,后一种方式相对更安全,同时减轻Server端压力。需要注意的是IBrowserFile接口没有包含原始文件的路径。正因为没有路径,不可能以打开文件的方式去直接打开它然后读取,所以,需要再次将它写入到定义好的路径中,然后打开它。
2023-05-19 10:35:14
967
原创 【SSL证书】使用mkcert创建局域网或单机可信任Windows格式证书
所谓SSL证书,其实它包含两个方面,一是根证书,二是HTTPS的证书,HTTPS证书合法性由其根证书来进行认定。几大证书供应商的根证书一般都预置在系统中了,所以给人的错觉就是只知HTTPS证书,而不清楚其根证书。所以,我们的目的是有两个,创建自己的根证书和由这个根证书能认定的HTTPS证书。不同的系统证书的格式不尽相同,Windows的格式后缀名为.crt或.p12,为包含安装需要密码的独立文件,其他系统的可能为.pem,为两个文件,其中一个是key文件。3、创建HTTPS Windows格式的证书。
2023-05-15 12:43:08
2018
1
原创 C#数据更新保存需要注意的一个问题
因为AppUser的Id是主键,不可修改,否则就是新数据,不能有主键等于什么的语句出现,即其中的“Id = Id”赋值语句不应出现,而不是通常以为的给用户修改的也只是Name,Id的值用户也看不到,不可能改变,没有修改。所以正确的做法是:要么直接传Model到前端进行修改,然后进行保存,因为这里不会出现Id的赋值语句;
2023-05-12 02:05:37
159
原创 C# Linq 生成视图的查询
所谓视图,就是需要显示的字段和需要计算的数据的列表,旨在显示不要求操作。数据表的Model 的字段非常全面,但可能没有包含计算的字段,而我们需要显示的数据可能不包含某些字段,甚至不需要显示非常大的列,但需要一些如统计等数据列,也可能是Model只包含外键,需要显示关联表的具体字段,那么就要用到生成视图的方法。首先,需要设计视图类,把要显示的列设计成属性字段,包括可能不需要显示但很重要的Model的主键Id,然后是视图的查询方法。这样返回的列表就可以用于显示了。
2023-04-30 13:35:01
210
原创 创建Blazor App 级联对象供各页面级组件使用
上一篇写到了创建Blazor全局页面对象供各页面级组件使用,有没有办法创建App 级联对象供各页面级组件使用呢?根据它我们就可以编写自己的App全局级联对象了:CascadingValueWithCallback.razor。
2023-04-17 17:03:40
187
原创 创建Blazor全局页面变量供各页面级组件使用
如果子组件1用户操作后,转到组件2,这时我们不想再显示组件1,又要处理不显示组件1的动作,再处理显示组件2的动作,真的很麻烦。页面变量其实就是Layout母版页中的Body能接受的变量,但是我们在编写组件页的时候,它不能简单地实现回调方法,编写的EventCallback 回调方法无法简单地 ="@某个父级方法",只要解决这个难题,问题就迎刃而解了。我觉得吧,就是个Id值,一般是int类型,供各页面组件使用来获取数据库的相应数据,这个非常有用,它能不再显示在浏览器Url路由中,更加安全。
2023-04-17 01:34:01
1086
原创 C#随机生成符合要求的密码并判断强弱
用户的密码设定是网络安全的重中之重,生成安全密码,在重要的网络数据安全中尤显重要。重要的用户密码很需要帮助他们随机生成高强度的密码。一般随机数都是伪随机,我们需要不同的种子,让它无限接近于真随机。下面就是一个生成随机密码的类,并根据密码的长度和密码字符的种类进行赋值判断强度。的源码简化修改而成。
2023-03-27 14:04:38
744
原创 Blazor JWT登录退出、身份控制、定时检测账户管理示例项目
功能:适合企业内部的账户分发(非开放公众注册)的App。1、身份控制:分发账户为初始密码,使用初始密码登录后必须修改密码才能使用相应身份的功能;根据身份提供相应菜单。2、定时检测:使用JWT功能,包括生成和验证jwt,可定义jwt生效时长、验证时间间隔,失效后自动转到登录页面。3、账户管理:包括添加、编辑、离职管理示例。本项目只在提供示例功能演示,力求简单明了和安全稳定高效,界面简单美化。
2023-03-20 23:03:28
495
原创 Blazor Server 的登录与退出(二)
注意:Key要求有一定的长度,建议复制新生成的Guid.NewGuid().ToString();上篇已经实现了登录与退出的主服务类,其他还需要一些具体的东西。1、引用Blazored.LocalStorage包;7、登录Razor组件(略)。注意:需要注册服务。...
2022-08-26 11:16:22
1805
原创 Blazor Server 的登录与退出(一)
如果自学Blazor ,因为增加了许多知识点,有许多问题会是一头雾水,难以理清。Blazor Server 的登录与退出就是一个非常难以理清的问题,因为我有强迫症,既然用了Blazor,我难道又要退回去用Razor Page?新建立的Blazor Server程序,使用Identity的个人标识账户,它的登录与退出默认使用的是Razor Page,因为它能非常清晰地得到ClaimsPrincipal 的User,和不支持Razor组件,特别是所以想抛开Razor Page,它的登录与退出只能另想办法,好像一
2022-07-08 17:39:46
5156
2
原创 .NET5.0 Code First 建立索引方法
Code First方式建立主键可以不需要注释,遵循约定即可,即属性为 Id、Id 、类名加Id都可以,这个很方便。其他的属性建立索引,原来的方式为属性上添加注释
2021-05-28 11:26:29
624
原创 RazorPage 读取Excel并显示数据
最近一直在查找RazorPage 读取Excel并显示数据的资料。首先是上传Excel文件。只有Blazor 的上传文件在https://docs.microsoft.com/zh-cn/aspnet/core/blazor/file-uploads?view=aspnetcore-5.0上有比较全面的上传文件代码,而Blazor 还不太熟悉,RazorPage的代码较为不全,最后是借鉴了Blazor 的代码进行改写,总算成功了。其次是读取Excel数据。以前曾使用的是Excel 的Applica...
2021-03-30 22:05:39
1203
原创 基于Identity提供的登录页面修改的显示左右垂直居中效果
Identity提供的登录页面只能说能用而已,想要漂亮一点,只能进行修改。我们需要左右垂直居中效果,同时加一个有颜色的边框,排列更符合中国人的审美习惯,具体代码如下:@page@model LoginModel@{ ViewData["Title"] = "账户登录";}<style> .top { margin-top:150px; } .bd { border-style: solid; bord
2021-03-13 00:10:20
141
原创 解决使用ASP.NET Core Identity如何在网站母版页显示用户中文姓名
最近在学Aspnetcore,由于新学,加上AspNetCore不断更新换代,碰到的问题百度查来的大多是旧答案,解决不了老问题。因为老问题常被新的更安全更快速的方案所替代,也常常删除或替换掉了老的解决方案。AspNetCore有容易的地方,有易用的地方,也有高深难用的地方。有这样一个需求,用户用账号登录,然后在网页上显示用户的姓名或昵称,也就是我要显示DisplayName,而不是User...
2019-12-19 14:43:22
874
原创 使用MvvmLight如何向ViewModel传递参数
MvvmLight是个很好的编程框架,使用方便,但如果不熟练也会有许多难以解决的问题。就比如不知道如何向ViewModel传递参数。在网上也有不少这样的问题,解答往往是使用它提供的Messenger,有方便之处,也有不便之处。比如,我要根据参数来获取数据库数据,那么势必要先做清空,再获取新数据,可能有别的绑定或私有字段进行相应的更改,造成不少麻烦,也有可能弄不好。不同类型的数据使用同一个View,...
2018-02-22 17:01:20
3996
1
原创 Wpf ComboBox 多级正反向级联的实现
思考了一个多星期,经过反复测试验证,终于实现了Wpf ComboBox 多级正反向级联,话不多说,下面上代码:这是一个企业管理系统示例,当然只是一个笑话。数据库有三张表,一张企业表,一张5级行政区划表,全国->省市->地市->县市->乡镇街道,还有一张注册表,标示使用者及其行政区划。为了简化示例,企业表只有2个字段,名称和地址,地址又分为2个字段,一个行政区划Id,联接行政区划表,一个行政区划
2018-01-09 11:17:43
2387
原创 用C#创建应用程序桌面快捷方式
private void CreateShortcutOnDesktop() { //添加引用 (com->Windows Script Host Object Model),using IWshRuntimeLibrary; String shortcutPath = Path.Combine(Environment.GetFold
2018-01-04 12:00:41
9223
1
原创 第二十课先乘除后加减——C#计算器编程教学
不少人念念不忘四则运算的运算符优先级,而Windows7的计算器基本型也没有实现它。其实根据我的算式运算解决思路,其实就查找有乘除的项,先加好(对象加),然后做加减。代码修改如下: private string RunCaclLists() { for (int i = 0; i < CaclLists.Count; i++)
2016-05-04 16:28:21
2767
原创 第十九课关于记忆存取——C#计算器编程教学
这个编程其实难度不高,无非就是反算式保存在memoryString里,读取时返回给caclString。如果增加点功能,无非就是把记忆的算式添加到新算式上。比如: private void MemoryRecall() { if (HaveMemory) { if (isOPA
2016-05-04 16:13:40
1122
原创 第十八课程序容错能力——C#计算器编程教学
支持键盘输入,不可控因素增加,必须具有很强的容错能力。一是中文习惯的乘除符号,与键盘及程序语言是不同的,所以,你要在SwitchString方法中添加对键盘乘除符号的支持。二是对错误输入进行过滤。三就是上面说的预期策略选择。四是对计算构造try一catch语句,把出错原因摆在明面上。第十八课结语。允许用户犯错,自己千万别犯错是程序员编程的最高原则。
2016-05-04 16:10:54
819
原创 第十七课预期策略选择——C#计算器编程教学
编程的一个难题是,方法我可以穷尽,但有些结果并非是用户的选择或期望,换个说法,有些表达具有二义性,可以这样,也可以那样,或者因为表达不够完整,因而结果是什么可能也有二义性。那么我们生成哪个结果呢?本程序有很多这样的情况。比如,用户输入了计算式,他再按开根号,你是给他当前项的根号值,还是给算式结果的根号值?用户输入了不完整的算式,你怎样处理?反正这都考验的不是编程能力,而是策略选择能力。一方
2016-05-04 16:08:07
394
原创 第十六课程序的测试和修改——C#计算器编程教学
为了编好这个程序,我点击运行几百次。从中找出的差错满箩筐。可能我写这一节课有点多余,因为大家都会这样做。但是我觉得还是要细说一下。测试程序,首要的目的是检验解决问题思路的正确性,不正确就要及时换思路。其次,检验程序逻辑的正确性,尤其是各种循环代码,它的初始值,它的验证值,以及它是否超出了范围而报错。第三,编程的期望和运行的实际是否相同,是否出现了预期的结果。第四测试用例要想周到,很多错误在于用
2016-05-04 16:06:09
630
原创 第十五课代码复用——C#计算器编程教学
新手和老手的区别之一,就是看代码的简洁程度。简洁的办法之一就是代码复用。看着我前面围绕等于写了至少5个方法,其实这其中有方法也由另外的方法调用,这就达到了复用的目的。举个例子,上节课讲到的取反,它的代码就用到了SetCaclLists方法。我不能在caclString上直接取反,那样做代码不是一般的长,也可能不可行。那么怎样实现呢?答案是:收到取反命令,先把已经接收到的输入串也就是cacl
2016-05-04 16:04:54
497
Blazor JWT登录退出身份控制定时检测账户管理示例项目
2023-03-20
Wpf ComboBox 多级正反向级联的实现示例
2018-01-09
C#计算器源码
2016-05-04
ASP.NET Web项目从IIS Express 改为IIS启动需要如何设置
2021-04-05
TA创建的收藏夹 TA关注的收藏夹
TA关注的人