热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

敏捷思维学习Ext.NetMVC3.8Form表单组件之使用Enum升级复选组件组(CheckboxGroup)暨前后台终极通信方式

敏捷思维学习Ext.Net MVC--3.8Form表单组件之使用Enum升级复选组件组(CheckboxGroup)暨前后台终极通信方式    经过了上节课的学习我们知道数据结

 

  敏捷思维学习Ext.Net MVC--3.8Form表单组件之使用Enum升级复选组件组(CheckboxGroup)暨前后台终极通信方式

    经过了上节课的学习我们知道数据结构可以改进网站开发的效率,我们在这里对Checkbox进行升级,并将它和刚才的RadioGroup放入同一个Form表单中看看数据该如何通信。

一、设计数据模型

我们先在FormModel中定义一个动物枚举类:

[Flags]

public enum MyAnimal

    {

        [Display(Name = "", Order = 1)]

        Dog = 1,//(1)

        [Display(Name = "", Order = 3)]

        Bird = 2,//(2)

        [Display(Name = "猴子", Order = 2)]

        Monkey = 4//(3)

    }

这里要注意(1)(2)(3)的取值,这里不是随意的而是有规律的,因为我们要进行枚举字段的或运算,这里我们的算法是当前数等于前面所有数的和加1,比如说第三个数4,等于1+2+1,如果有第四个数的话它的值为1+2+4+1=8,因为这是多选字段需要取或运算,取或运算是两个数相加如果这样取的话系统就可以自动解析出你都选择了那几个枚举值。

性别类我们依然保留

public enum Sex

    {

        [Display(Name = "", Order = 1)]

        Male,

        [Display(Name = "", Order = 2)]

        Female

    }

新建类EnumModel包含如下两个枚举字段

        public class EnumModel

    {

        public Sex ESex

        {

            get;

            set;

        }

        public MyAnimal EAnimal

        {

            get;

            set;

        }

    }

   

     

    新建GroupForModel类,这才是View页需要的最终模板。

public class GroupForModel

    {

        public string Name

        {

            get;

            set;

        }

        public EnumModel Enums

        {

            get;

            set;

        }

    }

二、在FormController中添加如下函数

public ActionResult MyGropFor()

        {

            GroupForModel GModel = new GroupForModel

            {

                Name="jack",

                Enums = new EnumModel {

                    EAnimal = MyAnimal.Bird | MyAnimal.Monkey,//(1)

                ESex=Sex.Male,

                

                

                }

 

            };

            return View(GModel);

        }

其他的我们就不介绍了,我们这里提醒一下(1),如果你不按刚才的规则设置枚举项的值得话,调试运行到这儿你会发现Enums的值是数字,因为或运算相加后系统无法解析你选择的是哪几项。

三、添加View页面文件MyGropFor.cshtml如下:

@model ExtExamples.Models.GroupForModel

@{

    Layout = "~/Views/Shared/_BaseLayout.cshtml";

}

@section example

{

    @(

        Html.X().FormPanel()

        .Title("单选字段")

        .Width(300)

        .Height(300)

        .Margin(10)

        .Items(

               

           Html.X().RadioGroupForEnum(m=>m.Enums.ESex),

           Html.X().CheckboxGroupForEnum(m=>m.Enums.EAnimal),//(1)

           Html.X().TextFieldFor(m=>m.Name)

             

                )

        .Buttons(Html.X().Button()

            .Text("提交")

            .DirectClickUrl(Url.Action("FormGroupForSubmit"))

    )

    )

}

1)这是复选组件组的生成函数

四、在FormController中添加FormGroupForSubmit函数处理传递过来的数据:

public FormPanelResult FormGroupForSubmit([Bind(Prefix = "Enums.ESex")]Sex sex, [Bind(Prefix = "Enums.EAnimal")]MyAnimal[] Animal, [Bind(Prefix = "Name")]string name)//(1)

        {

            X.Msg.Alert("Values"string.Format("最喜欢的动物: {0}, 
性别: {1},
姓名:{2}"
string.Join(", ", Animal.Select(b => b.ToString())), sex,name)).Show();//(2)

            return this.FormPanel();

        

        }

1)我们在这里加入Name属性的原因主要是说明前台数据向后台传递的模式,我们可以先看看页面使用的模板类:

public class GroupForModel

    {

        public string Name

        {

            get;

            set;

        }

        public EnumModel Enums

        {

            get;

            set;

        }

    }

看到这儿你就明白了,前台向后台传递数据时不会讲一个大类的数据完整地给你传递回来,为什么因为我们的软件还没有发展到那么先进,而只能将最终能够用xxxxFor生成控件的类传递回来,我们怎么接受?用Bind(Prefix = "Enums.ESex")函数进行绑定再在后面加上跟这个对象同类的对象就行,至于"Enums.ESex"怎么确定,把模板类省略掉后面的类名用.做分隔符依次写全,不明白怎么办?没关系我们还有FireBug,直接到调试器中找到这个Form字段的Name属性值拷过来即可。讲到这儿我们前后台基本的通信可以说是没有问题了,你可以以此去扩展不同效能的控件了。

2)跟以前稍有不同,这里使用的FormPanel返回前端的数据,并使用了字符串强制格式转换函数string.Format,这个函数的用法跟c语言中的print函数类似,只不过把占位符换为了{0}数据在后面用逗号隔开以此补全就好了。

运行网页如下所示

bubuko.com,布布扣 

 

提交数据后

bubuko.com,布布扣 

敏捷思维学习Ext.Net MVC--3.8Form表单组件之使用Enum升级复选组件组(CheckboxGroup)暨前后台终极通信方式,布布扣,bubuko.com


推荐阅读
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 二分查找算法详解与应用分析:本文深入探讨了二分查找算法的实现细节及其在实际问题中的应用。通过定义 `binary_search` 函数,详细介绍了算法的逻辑流程,包括初始化上下界、循环条件以及中间值的计算方法。此外,还讨论了该算法的时间复杂度和空间复杂度,并提供了多个应用场景示例,帮助读者更好地理解和掌握这一高效查找技术。 ... [详细]
  • 在使用Eclipse进行调试时,如果遇到未解析的断点(unresolved breakpoint)并显示“未加载符号表,请使用‘file’命令加载目标文件以进行调试”的错误提示,这通常是因为调试器未能正确加载符号表。解决此问题的方法是通过GDB的`file`命令手动加载目标文件,以便调试器能够识别和解析断点。具体操作为在GDB命令行中输入 `(gdb) file `。这一步骤确保了调试环境能够正确访问和解析程序中的符号信息,从而实现有效的调试。 ... [详细]
  • 在 LeetCode 的“有效回文串 II”问题中,给定一个非空字符串 `s`,允许删除最多一个字符。本篇深入解析了如何判断删除一个字符后,字符串是否能成为回文串,并提出了高效的优化算法。通过详细的分析和代码实现,本文提供了多种解决方案,帮助读者更好地理解和应用这一算法。 ... [详细]
  • 本项目通过Python编程实现了一个简单的汇率转换器v1.02。主要内容包括:1. Python的基本语法元素:(1)缩进:用于表示代码的层次结构,是Python中定义程序框架的唯一方式;(2)注释:提供开发者说明信息,不参与实际运行,通常每个代码块添加一个注释;(3)常量和变量:用于存储和操作数据,是程序执行过程中的重要组成部分。此外,项目还涉及了函数定义、用户输入处理和异常捕获等高级特性,以确保程序的健壮性和易用性。 ... [详细]
  • VS2019 在创建 Windows 恢复点时出现卡顿问题及解决方法
    在使用 Visual Studio 2019 时,有时会在创建 Windows 恢复点时遇到卡顿问题。这可能是由于频繁的自动更新导致的,每次更新文件大小可能达到 1-2GB。尽管现代网络速度较快,但这些更新仍可能对系统性能产生影响。本文将探讨该问题的原因,并提供有效的解决方法,帮助用户提升开发效率。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 系统数据实体验证异常:多个实体验证失败的错误处理与分析
    在使用MVC和EF框架进行数据保存时,遇到了 `System.Data.Entity.Validation.DbEntityValidationException` 错误,表明存在一个或多个实体验证失败的情况。本文详细分析了该错误的成因,并提出了有效的处理方法,包括检查实体属性的约束条件、调试日志的使用以及优化数据验证逻辑,以确保数据的一致性和完整性。 ... [详细]
  • 装饰者模式(Decorator):一种灵活的对象结构设计模式
    装饰者模式(Decorator)是一种灵活的对象结构设计模式,旨在为单个对象动态地添加功能,而无需修改原有类的结构。通过封装对象并提供额外的行为,装饰者模式比传统的继承方式更加灵活和可扩展。例如,可以在运行时为特定对象添加边框或滚动条等特性,而不会影响其他对象。这种模式特别适用于需要在不同情况下动态组合功能的场景。 ... [详细]
  • 本文详细解析了Autofac在高级应用场景中的具体实现,特别是如何通过注册泛型接口的类来优化依赖注入。示例代码展示了如何使用 `builder.RegisterAssemblyTypes` 方法,结合 `typeof(IEventHandler).Assembly` 和 `Where` 过滤条件,动态注册所有符合条件的类,从而简化配置并提高代码的可维护性。此外,文章还探讨了这一方法在复杂系统中的实际应用及其优势。 ... [详细]
  • 本指南详细介绍了如何利用华为云对象存储服务构建视频点播(VoD)平台。通过结合开源技术如Ceph、WordPress、PHP和Nginx,用户可以高效地实现数据存储、内容管理和网站搭建。主要内容涵盖华为云对象存储系统的配置步骤、性能优化及安全设置,为开发者提供全面的技术支持。 ... [详细]
  • 为了提升单位内部沟通效率,我们开发了一套飞秋软件与OA系统的消息接口服务系统。该系统能够将OA系统中的审批、通知等信息自动同步至飞秋平台,确保员工在使用飞秋进行日常沟通的同时,也能及时获取OA系统的各类重要信息,从而实现无缝对接,提高工作效率。 ... [详细]
  • 在分析和解决 Keepalived VIP 漂移故障的过程中,我们发现主备节点配置如下:主节点 IP 为 172.16.30.31,备份节点 IP 为 172.16.30.32,虚拟 IP 为 172.16.30.10。故障表现为监控系统显示 Keepalived 主节点状态异常,导致 VIP 漂移到备份节点。通过详细检查配置文件和日志,我们发现主节点上的 Keepalived 进程未能正常运行,最终通过优化配置和重启服务解决了该问题。此外,我们还增加了健康检查机制,以提高系统的稳定性和可靠性。 ... [详细]
  • 本文详细解析了逻辑运算符“与”(&&)和“或”(||)在编程中的应用。通过具体示例,如 `[dehua@teacher~]$[$(id -u) -eq 0] && echo "You are root" || echo "You must be root"`,展示了如何利用这些运算符进行条件判断和命令执行。此外,文章还探讨了这些运算符在不同编程语言中的实现和最佳实践,帮助读者更好地理解和运用逻辑运算符。 ... [详细]
  • 在 Android 开发中,`android:exported` 属性用于控制组件(如 Activity、Service、BroadcastReceiver 和 ContentProvider)是否可以被其他应用组件访问或与其交互。若将此属性设为 `true`,则允许外部应用调用或与之交互;反之,若设为 `false`,则仅限于同一应用内的组件进行访问。这一属性对于确保应用的安全性和隐私保护至关重要。 ... [详细]
author-avatar
手机用户2602891751
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有