前端基于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/)算 ...
随机推荐
- 各种oracle参数查询语句
各种oracle参数查询语句 1.show parameter:--显示各个系统参数配置 2.select * from v$parameter;--显示各个系统参数配置 2.show paramet ...
- Jquery页面中添加键盘按键事件,如ESC事件
$(document).keydown(function(event){ if(event.keyCode == 38 || event.keyCode == 104){ i--; if(i<= ...
- Robotium源码分析之运行原理
从上一章<Robotium源码分析之Instrumentation进阶>中我们了解到了Robotium所基于的Instrumentation的一些进阶基础,比如它注入事件的原理等,但Rob ...
- 探讨css中repaint和reflow
(个人blog迁移文章.) 前言: 页面设计中,不可避免的需要浏览器进行repaint和reflow.那到底什么是repaint和reflow呢.下面谈谈自己对repaint和reflow的理解,以及 ...
- PHP 5:PHP语法导向
原文:PHP 5:PHP语法导向 代码 ...
- VS2015 Apache Cordova
VS2015 Apache Cordova第一个Android和IOS应用 前言 本人个人博客原文链接地址为http://aehyok.com/Blog/Detail/75.html. http: ...
- [译]ava 设计模式之享元
(文章翻译自Java Design Pattern: Flyweight) 享元模式用于最小化内存开销.它做的就是使用其他相似的对象尽可能多的分享数据. 1.享元模式类图 2.享元模式Java代码 / ...
- List environment variables from Command Prompt
Request: List the environment variables from Command Promt To list one varibales , the syntax is lik ...
- Linux Shell脚本入门--Uniq命令
uniq uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用.也就是说,为了使uniq起作用,所有的重复行必须是相邻的. uniq语法 [root@www ~]# uniq [ ...
- css3动画实例测试
1.css3动画属性分析(2016-5-11) 1.transition: 规定属性变换规则,可以这样讲.transition(a,b,c,d); a:要变换的属性: b:过渡时间: c:运动方式: ...