『贴代码』
PasteSpider
PasteApeart
精选作品
优选问答
成长笔记
【本期话题】更多
                                    我们在开发中经常遇到对方的接口请求有频率限制,比如当前接口每秒的请求不能大于100,不能大于1000,对于这样的,我们作为请求方,如何做限定?
                    
如何实现枚举不一样的样式,比如错误是红色的,警告是黄色的,普通是默认的
贴代码 2026-01-22 134 1 3
我们知道说到枚举,一般有2个东西,1个是值,一个是名称,比如权限类型,有权限,菜单,按钮,对应的值可以自己定义,比如10,20,30,那么如何实现在UI中显示不一样的颜色呢?

--------------------------------------------------------------------------------------------------------------

PasteForm的升级版PasteApeart,享受极致简洁的框架的魅力,点击查看文档

--------------------------------------------------------------------------------------------------------------

效果图

图片alt
如上图,可以看到权限类型,有不一样的颜色!
首先你的dll的版本应该

      <PackageReference Include="PasteApeart.Helper" Version="26.1.15" />

我们都知道,有些数据用枚举比较好实现

代码

    /// <summary>
    /// 一些状态的枚举
    /// </summary>
    [Description("状态枚举")]
    public enum EnumStateQuery
    {
        /// <summary>
        /// 一般用于查询,表示忽略,直接查询所有
        /// </summary>
        [Description("查询")]
        all = -1,
        /// <summary>
        /// 一般表示禁用,不可用
        /// </summary>
        [Description("禁用")]
        fail = 0,
        /// <summary>
        /// 一般表示正常
        /// </summary>
        [Description("正常")]
        ok = 1,
        /// <summary>
        /// 一般表示取消
        /// </summary>
        [Description("取消")]
        cannel = 2,
        /// <summary>
        /// 一般表示删除
        /// </summary>
        [Description("删除")]
        deleted = 4
    }

改进代码

    /// <summary>
    /// 权限类型
    /// </summary>
    [Description("权限类型")]
    public enum EnumRoleType
    {
        /// <summary>
        /// 全部
        /// </summary>
        [Description("全部")]
        All = -1,
        /// <summary>
        /// <![CDATA[<i_*_style="color:green;">权限</i>]]>
        /// </summary>
        [Description("权限")]
        Role = 0,
        /// <summary>
        /// 菜单
        /// </summary>
        [Description("<span_*_style=\"background:#f3f3f3;color:blue;\">菜单</span>")]
        Menu = 1,
        /// <summary>
        /// 权限
        /// </summary>
        [Description("<span_*_style=\"color:red;\">按钮</span>")]
        Button = 2,
        /// <summary>
        /// 小程序菜单
        /// </summary>
        [Description("小程序菜单")]
        MiniMenu = 3
    }

读取代码

        /// <summary>
        /// 读取ListDto的数据模型
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [TypeFilter(typeof(RoleAttribute), Arguments = new object[] { "data", "view" })]
        public async Task<VoloModelInfo> ReadListModel()
        {
            var _model = BuilderHelper.AttributeReadModelProperty<RoleInfoListDto>(new RoleInfoListDto());
            var isRoot = await base.IsRootAsync();
            if (!isRoot)
            {
                if (_model.Properties != null)
                {
                    _model.Properties.RemoveAll(x => x.Name == "button");
                }
            }
            var _query_model = BuilderHelper.DynamicReadModelProperty(new InputQueryRoleInfo());
            if (_query_model != null)
            {
                _model.QueryProperties = _query_model.Properties;
            }
            return _model;
        }

看上面代码,我用了2个接口读取Dto的元数据

  • AttributeReadModelProperty
  • DynamicReadModelProperty
    其中AttributeReadModelProperty表示反射Dto后,从特性[Description]来读取注释内容
    而DynamicReadModelProperty表示从XML文档中读取注释内容

关键字*

我们都知道注释的规则是使用空格隔开的,
所以如果你要输出空格,得用*替代!
注释共有几种格式
1.直接留空,这样Form得时候,就直接显示内容了,这个在[PasteSumform]中常搭配使用
2.就单个,表示只有名称,没有注释
3.双段,用空格隔开,表示第一段是名称,第二段是注释
4.三段,其实第一段和第二段有用之外,第三段对于前端来说没用了,第三段得内容主要是给后端开发用得,也就是你鼠标放字段上得时候,提示得注释,是不是很灵活!

更多思考

如果这个枚举,我要前端也就是管理端来控制样式要如何做?
试试class和[PasteHtml]配合使用!元数据只返回枚举得值,然后[PasteHtml]返回特定样式

        /// <summary>
        /// 类型
        /// </summary>
        [Description("类型")]
        [PasteHtml("<span class=\"rclass rtype{{:=item.role_val}}\">{{:=item.roleType}}</span>")]
        public EnumRoleType RoleType { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [PasteHidden]
        public int role_val { get { return (int)RoleType; } }

注意
RoleType返回前端,我默认是小写开头得,也就是roleType,由于他是枚举类型,在UI中会转化成名称(权限),而不是值(2)
所以需要用另外一个字段role_val进行转化
然后PasteHtml中,用到了2个宏!

{{:=item.role_val}}

其中{{:=}}这个是宏的格式,item是为了和表格的行数据匹配,所以form中也用这个表示当前对象,至于role_val就是对应的字段了!
在特定的情况下这个item也表示url中的query!!!

评论列表
贴代码
1 134 3
快捷注册
用户问答更多
PasteApeart和PasteForm如何选择?
  • 不用选,后面都是PasteApeart,他们其实是一个东西

PasteApeart中有多层级继承的,表单中的字段排列顺序有什么规则?
  • 看版本,PasteApeart.Helper 26.9.2之后,就按照基类前面的顺序了,也符合阅读顺序,当然你可以使用PasteSort再次改变他!

PasteForm,神奇了啊!都说低代码,低代码,那个是对于非开发者来说的,感觉PasteForm就是开发者的低代码啊!只要配置好Model,就有对应的CRUD操作,还带一些逻辑,和生成代码是两码事了!!!问题来了,有什么局限性,或者适用哪些场景?
  • 1.语言吧,这本身只是一个开发思想,其实其他语言也可以用,不过最优雅实现的还是.NET

    2.特别适用于需要表单,表格的系统,所以哪些EMS,CRM,ERP等都合适

    3.扩展,比如这个思想,你也可以应用于C/S,理论上也是可以的

    4.这个主要针对的是管理端,附带UI的CRUD,也就是说对于业务代码,是没影响的!

    5.可能入门会麻烦点,毕竟有接近100个PasteXXXX特性要了解,幸运的是都是Paste开头,官方的也支持,比如MaxLength,Required等!

最新动态
  • 142.****.82 正在查看 文章列表页 !
  • 185.****.13 正在查看 关于PasteSpiderV2版本升级V5版本后,部署的服务会走一遍扩容的说明 !
  • 40.****.3 正在查看 12306班次筛选座位逻辑 !
  • 114.****.237 正在查看 Document:spider !
  • 52.****.208 正在查看 使用Obfuscar混淆(加密)你的程序源码并一键发布! !
  • 218.****.141 正在查看 PasteApeart框架介绍,PasteApeart为啥说是敏佳开发天花板,看这篇就够了 !
  • 216.****.137 正在查看 使用PasteSpider实现CI/CD持续部署,类似Jenkins的功能,让你的2G服务器也可以飞起 !
  • 36.****.7 正在查看 主页pastespider !
  • 122.****.51 正在查看 有哪些高大上的词语,你有没有被虎得一愣一愣得,一起来看看AI的吐槽! !
  • 36.****.208 正在查看 PasteApeart框架介绍,PasteApeart为啥说是敏佳开发天花板,看这篇就够了 !
  • 40.****.40 正在查看 使用Obfuscar混淆(加密)你的程序源码并一键发布! !
欢迎加入QQ讨论群 296245685 [PasteSpider]介绍 [PasteForm]介绍 @2022-2023 PasteCode.cn 版权所有 ICP证 闽ICP备2021013869号-2