前端基于easyui的mvc扩展(续)
前端基于easyui的mvc扩展(续)
回顾及遗留问题
上一篇讲解了基于easyui的mvc扩展的基本实现,已经降低了在mvc内使用easyui的难度,但是仍然还有一些问题:
- 当我们要给生成的控件设置一些其他的属性(如:id)或者想要设置easyui控件的一些其他的可配置项
- 对于form表单提交时,也要让form表单基于easyui的验证机制来进行验证
这里要先提一下,上一篇的TagBuilder并不是微软自带的(位于System.Web.Mvc下),而是自己实现的,理由嘛,既然我们编码了mvc下对于easyui的扩展,那么同样也可以去扩展普通的web form(后面的文章会再进行扩展),TagBuilder的实现方式跟微软提供的很相像,大家自己实现吧,^_^。
实现
由于所要增加的额外属性是以key、value方式存在的,如:id="myId" or onclick="findRecords"等,那么我们看以通过增加一个Dictionary<string, string>参数的方式来将我们需要的配置传给构造easyui html的方法,大致的代码如下:
Html.Combobox(m => m.StateId,"States",newDictionary<string,string>{{"id","cboState"},{"data-options","width: 100, editable: false"}})
TagBuilder内只要对传入的字典进行此存储,然后在生成Html的时候将KeyValuePair<string, string>转化为key="value"形式的字符串就可以了。
而对于form表单结合easyui的验证原本easyui便提供了form表单的功能,只需要我们使用如下代码,便可以进行验证:
$('#myForm').form({
onSubmit:function(){var isValid = $(this).form('validate');return isValid;},
success:function(data){//这里不像jQuery那样可以返回json对象,data永远都是一个字符串,除非使用ajax form表单进行自己的扩展}});
由于mvc内对于表单验证已经提供了支持,但是因为我们自己进行了自定义的扩展,那么在执行controll的Action的时候,mvc虽然会帮我们对表单的实体进行验证,但并不会主动在验证失败的情况下阻止Action的执行,因此我们需要自己寻找其他的方式在表单实体验证失败的情况下,将失败的信息返回到客户端进行提示。
我们知道所有的Controller都继承自System.Web.Mvc.Controller(它是继承自IController的),System.Web.Mvc.Controller有一个受保护的OnActionExecuting方式,当我们对方法的ActionExecutingContext的Result进行赋值的情况下,它会阻止原本要继续执行的Action的触发,而且Result内的值会回传给客户端,因此我们可以在此方法内对于表单实体是否验证失败来完成我们的操作,代码如下:
protectedoverridevoidOnActionExecuting(ActionExecutingContext filterContext){if(ViewData.ModelState.IsValid){base.OnActionExecuting(filterContext);}else{
filterContext.Result=Content("{\"success\":false, \"message\":\"表单数据异常\"}");}}
这里要注意了,如果使用mvc自带的Json方法来回传数据的话,传递到客户端永远都只是{},这里大家可以使用Json.Net来将对象转化为json。
到了这里,该有的功能我们基本上都已经完成了,其实还有一些小问题没有解决,那就是当我们配置控件属性的时候,如果是函数的情况下,就只能将函数必须是全局的或者要写在属性的值里面,实在很不方便,或者大家可以跟我一样,用其他的属性来代替这些配置,我使用的方式如下:
@Html.Combobox(m => m.StateId,"States",newDictionary<string,string>{{"easyui","onSelect:selectState,formatter:formatterState"}})@Html.Linkbutton("上传",newDictionary<string,string>{{"bind":"click:uploadFile"}})
然后在js文件或者<script>脚本内对以上的格式进行解析,这样就可以根据自己的方式来声明函数了。
其次就是老是要写一大串的字典来声明额外的属性实在是很麻烦的事情,那么也可以使用json的方式将字符串直接写入,代码如下:
@Html.ValidatePassword(m => m.Password,@"{ validType: 'remote[\'/user/CheckPassword\', \'password\']', invalidMessage: '密码有误!' }")
那么只要在后台将其解析为Dictionary<string,string>就可以了,方便了许多,有其他喜欢的格式也可以自己去定义,然后编码相关的解析方法也是可以实现的。
那么今天的后续部分就到这里结束了,有错误的地方请大家指出,谢谢大家!
前端基于easyui的mvc扩展(续)的更多相关文章
- 前端基于easyui的mvc扩展
背景 由于MVC的前端是基于jquery.validate和jquery.validate.unobtrusive来实现的,但是当我们要使用其他的ui组件且组件本身就带有完整的验证功能的话,那么要让它 ...
- 基于easyui的webform扩展(续)
基于easyui的webform扩展(续) 回顾 <前端基于easyui的mvc扩展>.<前端基于easyui的mvc扩展(续)>.<基于easyui的webform扩展 ...
- 基于easyui的webform扩展
基于easyui的webform扩展 回顾 <前端基于easyui的mvc扩展>.<前端基于easyui的mvc扩展(续)>前两篇介绍了mvc内如何基于easyui进行扩展,在 ...
- 基于easyui的验证扩展
基于easyui的验证扩展 ##前言 自己做项目也有好几年的时间了,一直没有时间整理自己的代码,趁春节比较闲,把自己以前的代码整理了一篇.这是基于easyui1.2.6的一些验证扩展,2012年就开始 ...
- 基于easyui与MVC的前端界面
1.登录界面: 2.主界面: 下载源码
- 快速开发框架,及库存管理系统,基于easyui框架和C#语言MVC、EntityFrameWork、T4模板技术。
快速开发框架,及库存管理系统,基于easyui框架和C#语言MVC.EntityFrameWork.T4模板技术. 产品界面如下图所示: 源码结构: 开放全部源码,如有需要请联系,QQ:1107141 ...
- 使用Asp.Net Core MVC 开发项目实践[第四篇:基于EF Core的扩展2]
上篇我们说到了基于EFCore的基础扩展,这篇我们讲解下基于实体结合拉姆达表达式的自定义更新以及删除数据. 先说下原理:其实通过实体以及拉姆达表达式生成SQL语句去执行 第一种更新扩展: 自定义更新字 ...
- EasyUI + Spring MVC + hibernate实现增删改查导入导出
(这是一个故事--) 前言 作为一个JAVA开发工程师,我觉得最基本是需要懂前端.后台以及数据库. 练习的内容很基础,包括:基本增删改查.模糊查询.分页查询.树菜单.上传下载.tab页 主管发我一个已 ...
- 基于存储过程的MVC开源分页控件--LYB.NET.SPPager
摘要 现在基于ASP.NET MVC的分页控件我想大家都不陌生了,百度一下一大箩筐.其中有不少精品,陕北吴旗娃杨涛大哥做的分页控件MVCPager(http://www.webdiyer.com/)算 ...
随机推荐
- APMServ—我用过的最优秀的PHP集成环境工具
原文:APMServ-我用过的最优秀的PHP集成环境工具 经常折腾wordpress和各种cms,免不了要在本地测试一些程序,所以选择一款好的php集成环境就至关重要啦. 1. 我用过的php集成环境 ...
- SSAS系列——【07】多维数据(查询Cube)
原文:SSAS系列——[07]多维数据(查询Cube) 1.什么是MDX? MDX叫做"多维表达式",是一种查询语言,是一种和SQL类似的查询语言,它基于 XML for Anal ...
- Windows socket之最简单的socket程序
原文:Windows socket之最简单的socket程序 最简单的服务器的socket程序流程如下(面向连接的TCP连接 ): 1. WSAStartup(); 初始化网络库的使用. 2. soc ...
- 关于UtilTimerStack类的使用--XWork2、Struts2内置性能诊断类
关于UtilTimerStack类的使用--XWork2.Struts2内置性能诊断类 一.UtilTimerStack做什么用的? 这个本来是Xwork2(Struts2的核心)的相关的工具类,可以 ...
- linux下编译安装mysql5.5以上版本
安装cmake: tar zxvf cmake-2.8.4.tar.gz cd cmake-2.8.4 ./configure --prefix=/usr/local/cmake make & ...
- HDU 1983 BFS&&DFS
大多数刚需封锁4区域可以,DFS地区封锁.BFS无论是通过 #include "stdio.h" #include "string.h" #include &q ...
- C#用Open与Add方法打开word文档的区别
C#打开word文档常用有两种方法:Add与Open. Microsoft.Office.Interop.Word._Document doc = (Document)appWord.Document ...
- Java 集合之LinkedList源码分析
1.介绍 链表是数据结构中一种很重要的数据结构,一个链表含有一个或者多个节点,每个节点处理保存自己的信息之外还需要保存上一个节点以及下一个节点的指针信息.通过链表的表头就可以访问整个链表的信息.Jav ...
- bootstrap-paginator 分页插件笔记
[MVC]bootstrap-paginator 分页插件笔记 bootstrap-paginator基于bootstrap框架,使用起来非常简单.官网:http://harttle.github ...
- JavaScript中JSON字符串和JSON对象相互转化
JSON字符串转化为JSON对象的2种方式 一.使用函数eval var personsstr = '[{"Name":"zhangsan","Age ...