FineUI小技巧(2)将表单内全部字段禁用、只读、设置无效标识
发布日期:2021-09-08 01:45:19 浏览次数:43 分类:技术文章

本文共 4954 字,大约阅读时间需要 16 分钟。

需求描述

对表单内的所有字段进行操作也是常见需求,这些操作有:

  1. 禁用:表单字段变灰,不响应用户动作。
  2. 只读:表单字段不变灰,但不接受用户输入(实际上是设置DOM节点的readonly属性),有触发器的要隐藏起来
  3. 设置无效标识:一般用在服务器端验证失败的提示信息

界面效果

  1. 默认状态
  2. 禁用状态
  3. 只读状态
  4. 设置无效标识状态

前台代码

 前台代码非常直观,只是一个Form控件外加几个Button控件,按钮的响应事件在后台完成:

1 
2
4
5
6
7
8
9
10
11
12
13
14
15
17
18
19
20
21
22
23
24
25
26
27
29
30
31
32
33
35
36
38
39
40
41 42
43
44
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
View Code

后台代码

因为几个按钮的逻辑类似,这里我们定义一个代理(delegate),把相同的逻辑放在一个函数中完成,如下所示:

1 private delegate void ProcessFormField(Field field); 2  3 private void ResolveFormField(ProcessFormField process) 4 { 5     foreach (FormRow row in Form1.Rows) 6     { 7         foreach (Field field in row.Items) 8         { 9             if (field != null)10             {11                 process(field);12             }13         }14     }15 }

几个按钮的只需要调用刚刚定义的ResolveFormField函数,并传入自己的代理实现即可:

1 protected void btnDisableAll_Click(object sender, EventArgs e) 2 { 3     ResolveFormField(delegate(Field field) 4     { 5         field.Enabled = false; 6     }); 7 } 8  9 protected void btnEnableAll_Click(object sender, EventArgs e)10 {11     ResolveFormField(delegate(Field field)12     {13         field.Enabled = true;14     });15 }16 17 protected void btnReadOnlyAll_Click(object sender, EventArgs e)18 {19     ResolveFormField(delegate(Field field)20     {21         if (!(field is Label))22         {23             field.Readonly = true;24         }25     });26 }27 28 protected void btnCancelReadOnlyAll_Click(object sender, EventArgs e)29 {30     ResolveFormField(delegate(Field field)31     {32         if (!(field is Label))33         {34             field.Readonly = false;35         }36     });37 }38 39 protected void btnMarkInvalid_Click(object sender, EventArgs e)40 {41     ResolveFormField(delegate(Field field)42     {43         if (!(field is Label))44         {45             field.MarkInvalid("这个字段出错了!");46         }47     });48 }49 50 protected void btnClearInvalid_Click(object sender, EventArgs e)51 {52     ResolveFormField(delegate(Field field)53     {54         if (!(field is Label))55         {56             field.ClearInvalid();57         }58     });59 }
View Code

本章小结

本篇文章介绍了如何对表单内全部字段进行批量操作,要注意禁用和只读的区别,虽然两种情况下表单字段都不响应用户动作,但还是有一些细微的差别,首先是颜色的变化不同,其次只读时会隐藏TriggerBox右侧的触发按钮。

后台的代码实现用到了C#代理(delegate),从JavaScript的角度看其实就是个回调函数,只不过C#的强类型限制,必须把这个回调函数抽象成一个类型而已。

专业版截图

FineUI(专业版)是由三生石上全新打造的基于 jQuery 的专业 ASP.NET 控件库,计划在七月下旬正式发布。

选择FineUI(专业版)的四大理由:
1. 简单:专业版和开源版兼容(v4.x),您现在就可以使用开源版进行开发,等正式版发布时只需替换 DLL 即可。
2. 极速:专业版基于 jQuery 库重写,使得 JS 和 CSS 体积大幅减少,页面加载速度将是开源版的 2 倍以上。
3. 多彩:专业版内置 24 种 jQueryUI 皮肤,用户还可以使用 jQueryUI ThemeRoller 创建专属自己的皮肤。
4. 便宜:专业版不限开发者数量和永久免费升级,使得典型授权案例的费用减少为开源版的 1/3 左右。
声明:

    1. FineUI(专业版)授权协议是商业授权,需购买使用。
    2. FineUI(开源版)授权协议是Apache License v2.0,免费下载使用,并且会继续维护和开发,个人用户推荐使用开源版。

源代码与在线示例

本系列所有文章的源代码均可自行下载:

在线示例(暂时不可用):

这个示例会添加到下个版本的FineUI(开源版)中,因此在线示例还不可见,需要的同学请自行下载全部源代码,自己运行。 

 

如果本文对你有所启发或者帮助,请猛击“好文要顶”,支持原创,支持三石!

 

 

 

转载地址:https://blog.csdn.net/weixin_34310369/article/details/85636237 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:一起来写2048(160行python代码)
下一篇:Unity Chan 2D Asset

发表评论

最新留言

很好
[***.229.124.182]2024年03月29日 04时46分49秒