• 系列教程
  • 开发文档
.NET/.NET Core面试题
.NET/.NET Core面试题
MySQL常见面试题
MySQL常见面试题
.NET Core基于abp vnext 开发个人网站【专题】
.NET Core基于abp vnext 开发个人网站【专题】
abp+vue-element-admin搭建个人网站
abp+vue-element-admin搭建个人网站
vs code 编辑器基础使用专题
vs code 编辑器基础使用专题
网站SEO优化专题,让搜索引擎对网站更有亲和力
网站SEO优化专题,让搜索引擎对网站更有亲和力
C# linq如何使用,无法识别方法等问题专场
C# linq如何使用,无法识别方法等问题专场
  • MySQL COUNT() 函数使用指南

    MySQLCOUNT()函数用于统计表达式代表的所有值的中的非NULL值的数量。COUNT()语法这里是MySQLCOUNT()函数的语法:COUNT(expr)我们通常在SQL中按如下方式使用COUNT()函数:SELECTCOUNT(expr),...FROMtable_name[WHERE..

  • .Net(C#) 后台使用WebClient(客户端控制台程序)执行Get和Post请求的方法

    本文主要介绍.Net(C#)中,使用WebClient在程序后台(客户端/控制台程序)执行Get和Post请求,或者上传下载数据的方法及示例代码。WebClient主要面向了WEB网页场景,在模拟Web操作时使用较为方便。

  • MySQL JSON_SEARCH() 函数

    MySQLJSON_SEARCH()函数返回一个给定字符串在一个JSON文档中的路径。JSON_SEARCH()语法这里是MySQLJSON_SEARCH()的语法:JSON_SEARCH(json,one_or_all,search_str)JSON_SEARCH(json,one_or_all,

  • .NET(C#) Json.Net(newtonsoft)操作处理(解析)JSON数据(LINQ to JSON)

    本文主要介绍通过LINQ的语法使用Json.Net(newtonsoft)库进行Json数据的序列化和反序列化。LINQtoJSON是一个用于处理JSON对象的API。它在设计时考虑到了LINQ,以支持快速查询和创建JSON对象。LINQtoJSON位于Newtonsoft.Json.Linq命名空间。

  • 解决微信小程序 自定义tabBar 切换时候闪烁问题

    这个闪烁真的很迷我搜了一些资料,进行了以下步骤的操作第一种解决办法,把tabbar自定义组件的this.setData中的代码注释掉显示tabbar中的页面中,添加下面的:这个好像没什么用啊第二种方法:把cover-view标签,全部替换成view标签,cover-image也换成icon我直接上代码,上面是原本的代码,下面是新代码custom-tab-bar/index.wxml<!--miniprogram/custom-tab-bar/index.wxml-->&l

  • MySQL EXPORT_SET() 函数

    MySQLEXPORT_SET()函数根据参数的二进制位生成一个使用指定分隔符拼接的字符串。EXPORT_SET()语法这里是MySQLEXPORT_SET()函数的语法:EXPORT_SET(bits,on,off,separator,length)参数bits必需的。一个数字。将bits转为二进

  • uniapp 开发实操二:uniapp 调用 微信小程序自定义组件

    用uniapp开发手机app,有些功能需要结合原生代码进行开发.主流原生有android,ios,微信小程序等。下面先来看下微信小程序是如何自定义的。1.微信页面页面源码:<viewclass="container"><movie></movie><movie></movie><movie></movie></view>样式:.container{padding:

  • ASP.NET Core Web API上传多个文件和JSON数据的方法及代码

    本文主要介绍ASP.NETCoreWebAPI中,同时上传多个文件和JSON数据到控制器(Controller)的方法及使用的代码。

CSS|HTML   小程序开发   运维部署  开发技巧 推荐阅读

  • MySQL CURRENT_TIMESTAMP() 函数 MySQL CURRENT_TIMESTAMP() 函数 MySQLCURRENT_TIMESTAMP()函数按YYYY-MM-DDhh:mm:ss格式返回当前时间和日期。CURRENT_TIMESTAMP()函数与NOW()函数完全相同。CURRENT_TIMESTAMP()语法这是MySQLCURRENT_TIMESTAMP()函数的语法:CURREN 文章阅读
  • 微信小程序自定义picker多列选择器 微信小程序自定义picker多列选择器 需求说明使用mpvue实现自定义的picker多列选择器。1、数据结构说明根据picker的数据特征,需要构造一个如下所示的数据结构。data数组中的三个元素,分别用于渲染picker多列选择器的三列数据。能否构造出这个数据结构,直接影响了picker多列选择器实现的难易程度。pid的作用是用于构建出满足picker多列选择器的树状数据结构,要特别注意。constdata=[//用于picker第一列的数据源[{id:1,name:'A' 文章阅读
  • Java 使用Gson(com.google.code.gson)解析处理Json数据的方法及示例代码 Java 使用Gson(com.google.code.gson)解析处理Json数据的方法及示例代码 Gson是一个Java库,可用于将Java对象转换为其JSON表示。它还可用于将JSON字符串转换为等效的Java对象。Gson可以处理任意Java对象,包括您没有源代码的预先存在的对象。本文主要介绍Java中使用Gson(com.google.code.gson)解析处理Json数据,通过Gradle或Maven方式引用,Json数据的序列化和反序化及使用的示例代码。 文章阅读

文章|阅读

  • 2021目标期望没达到预期,今天过后所有的期待与努力无最爱、无例外、往事清零,一起跨入2022,续上昨日的期

    Life

  • 一、长按图片保存只需要image标签给上‘show-menu-by-longpress=‘1’’属性,就可以实现长按保存功能及长按识别图片中小程序二维码,特别方便<imagesrc="1.png"show-menu-by-longpress='1'></image>二、点击按钮保存图片至相册如果调取用户授权访问相册,在用户拒绝后,安卓会出现无法再继续保存的问题,这边给出苹果和安卓都适用的方法,代码如下:<buttonbindtap="savePoster"&

    小程序

  • 1打开ps,新建画布。2点击左侧矩形工具,画一个矩形。3再按住alt键再画一个矩形。4上方路径操作选择合并形状组件。5两个图形就成为整体了。6总结如下。END

    开发技巧

  • 我们在展现层有分页请求时,一般需要指定两个参数,一个用来标志第几页、一个是每页行数(一般有配置文件配置)。因为分页是一个很常用的功能,所以,展现层我们有分页请求时,最好有相应的DTO来封装这两个参数。在ABP源码中并没有为我们封装这样公用的类,但是在ABPZero项目中,定义了相应的分页Dto。对应的类图如下:分页排序过滤相应Dto类图从中可以看到主要包括以下四个公共DTO定义:PagedInputDto:分页请求DtoPagedAndSortedInputDto:分页排序DtoPagedSortedAndFilteredInputDto:分页排序过滤DtoPagedAndFilteredInputDto:分页过滤Dto是不是很实用,我们的分页一般是和过滤排序混合使用的。其中主要定义了以下几个主要属性:MaxResultCount:每页行数,可以从定义的配置中读取。SkipCount:跳转数量,一般计算公式为SkipCount=Page*MaxResultCount(页数*行数)。Filter:过滤字符串Sorting:排序方式具体的实现就不详述了,相信仔细看类图,就能自己动手实现。AbpZero把这些公共Dto定义在了应用服务层的Dto文件夹下,具体路径如下图。2.如何使用分页DTO拿我们的任务清单举例,我们修改下创建的GetTaskInputDto,让它继承自PagedSortedAndFilteredInputDto,这样GetTaskInputDto就拥有了进行分页排序过滤需要用到的属性。public>GetTasksInput:PagedSortedAndFilteredInputDto{publicTaskState?State{get;set;}publicint?AssignedPersonId{get;set;}}3.返回分页结果DTOAbp已经为我们定义了泛型的PagedResultDto用来包装返回的分页结果。其中主要包括两个属性,intTotalCount保存总个数,IReadOnlyList<T>Items保存返回的分页结果集。4.应用服务层分页逻辑实现1、在ITaskAppService中定义接口PagedResultDto<TaskDto>GetPagedTasks(GetTasksInputinput);2、在TaskAppService中实现接口:publicPagedResultDto<TaskDto>GetPagedTasks(GetTasksInputinput){//初步过滤varquery=_taskRepository.GetAll().Include(t=>t.AssignedPerson).WhereIf(input.State.HasValue,t=>t.State==input.State.Value).WhereIf(!input.Filter.IsNullOrEmpty(),t=>t.Title.Contains(input.Filter)).WhereIf(input.AssignedPersonId.HasValue,t=>t.AssignedPersonId==input.AssignedPersonId.Value);//排序query=!string.IsNullOrEmpty(input.Sorting)?query.OrderBy(input.Sorting):query.OrderByDescending(t=>t.CreationTime);//获取总数vartasksCount=query.Count();//默认的分页方式//vartaskList=query.Skip(input.SkipCount).Take(input.MaxResultCount).ToList();//ABP提供了扩展方法PageBy分页方式vartaskList=query.PageBy(input).ToList();returnnewPagedResultDto<TaskDto>(tasksCount,taskList.MapTo<List<TaskDto>>());}分页的实现很简单,先进行过滤,排序,再进行分页,最后使用PagedResultDto封装分页结果。细心的你也许发现了两个未曾在Linq中用过的方法WhereIf和PageBy,是的,这是ABP提供的扩展方法,感兴趣的可以看下源码QueryableExtensions的具体实现,其实实现的很简单,但我们平时在使用linq时却未必能想得到。在这里提几个问题:请问在这段代码中共进行了几次查询?代码中使用的是什么分页技术?(真分页?假分页?)5.使用X.PagedList进行前端分页在Asp.NetMvc中进行前端分页有一系列开源实现,在我的Demo中使用的是开源的X.PagedList分页。想了解具体源码,请参考X.PagedListGitHub。1、请自行在Web项目中安装X.PagedList.MvcNuget程序包X.PagedList.MvcNuget程序包2、在Controller中使用X.PagedList提供的方法构造分页结果供前端使用因为我们在应用服务层已经手动实现了分页逻辑,所以按照X.PagedList官网示例,我们需要自行构造StaticPagedList作为返回结果。publicActionResultPagedList(int?page){//每页行数varpageSize=5;varpageNumber=page??1;//第几页varfilter=newGetTasksInput{SkipCount=(pageNumber-1)*pageSize,//忽略个数MaxResultCount=pageSize};varresult=_taskAppService.GetPagedTasks(filter);//已经在应用服务层手动完成了分页逻辑,所以需手动构造分页结果varonePageOfTasks=newStaticPagedList<TaskDto>(result.Items,pageNumber,pageSize,result.TotalCount);//将分页结果放入ViewBag供View使用ViewBag.OnePageOfTasks=onePageOfTasks;returnView();}从代码中可以看到我们构造完X.PagedList提供的分页结果后放入了ViewBag中,供视图使用。3、View中添加分页控件PagedList视图的代码如下:@usingX.PagedList.Mvc;@usingAbp.Web.Mvc.Extensions@usingX.PagedList;<link>"~/Content/PagedList.css"rel=">"list-group">@foreach(vartaskinViewBag.OnePageOfTasks){<li>="list-group-item"><div>="btn-grouppull-right"><buttontype="button">="btnbtn-info">Edit</button><buttontype="button">="btnbtn-success">Delete</button></div><div>="media"><a>="media-left">"#">@*<i>="fa@Model.GetTaskLable(task)fa-3x"></i>*@</a><div>="media-body"><h4>="media-heading">@task.Title</h4><span>="text-muted">@task.CreationTime.ToString("yyyy-MM-ddHH:mm:ss")</span></div></div></li>}</ul>@Html.PagedListPager((IPagedList)ViewBag.OnePageOfTasks,page=>Url.Action("PagedList",new{page}))其中最后一句代码是用来生成分页控件。最终效果如图:总结本节主要讲解了如何使用ABP进行后台分页,并顺带讲解了ABP后台分页逻辑的实现方式。同时也演示了如何使用X.PagedList进行前端分页

    .Net

  • 系列文章列表,点击展示/隐藏系列教程一目录:知识点源码解析系列教程二目录:BcvpAbpVnext讲解系列教程三目录:单个知识点讲解系列教程四目录:分库分表(日志系统案例讲解)本文梯子正文缘起abp默认提供的Claims不够用,当系统需要添加自定义Claims.正文首先abp默认提供了'IAbpClaimsPrincipalContributor'接口来帮助实现,该接口实现会在颁发token的时候调用.publicasyncTaskContributeAsync(AbpClaimsPrincipalContributorContextcontext){//只是个简单例子varclaimsIdentity=context.ClaimsPrincipal.Identities.FirstOrDefault();claimsIdentity.AddOrReplace(newClaim(xxxClaimsPrincipal.TenantPath,tenant.Name));claimsIdentity.AddOrReplace(newClaim(xxxClaimsPrincipal.TenantEnterpriseId,kuforeTenant.Data.EnterpriseByPath.Id));claimsIdentity.AddOrReplace(newClaim(xxxClaimsPrincipal.TenantOwnerUserId,kuforeTenant.Data.EnterpriseByPath.OwnerUserId));claimsIdentity.AddOrReplace(newClaim(xxxClaimsPrincipal.TenantActiveEdition,kuforeTenant.Data.EnterpriseByPath.ActiveEdition.ToString()));}重点来了如果你只是这样用了,你会发现你在需要读取Claims的时候,你读不到数据,但是你断点你又发现命名赋值成功了。这里我们找到'IdentityServerDataSeedContributor.cs',看下面代码应该懂得都懂了,如果你ids4的Claims中不包含会在颁发的时候移除掉你的ClaimsprivateasyncTaskCreateApiResourcesAsync(){varcommonApiUserClaims=new[]{"email","email_verified","name","phone_number","phone_number_verified","role",xxxClaimsPrincipal.TenantPath,xxxClaimsPrincipal.TenantEnterpriseId,xxxClaimsPrincipal.TenantOwnerUserId,xxxClaimsPrincipal.TenantActiveEdition};awaitCreateApiResourceAsync("xxx",commonApiUserClaims);}结语也欢迎大家阅读我的AbpvNext系列教程联系作者:加群:867095512@MrChuJi

    .Net

2023年 06月02日

周五