前端基于easyui的mvc扩展(续)

回顾及遗留问题

  上一篇讲解了基于easyui的mvc扩展的基本实现,已经降低了在mvc内使用easyui的难度,但是仍然还有一些问题:

  1. 当我们要给生成的控件设置一些其他的属性(如:id)或者想要设置easyui控件的一些其他的可配置项
  2. 对于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>就可以了,方便了许多,有其他喜欢的格式也可以自己去定义,然后编码相关的解析方法也是可以实现的。

  那么今天的后续部分就到这里结束了,有错误的地方请大家指出,谢谢大家!

 
 
分类: C#mvc想法
 
 

前端基于easyui的mvc扩展(续)的更多相关文章

  1. 前端基于easyui的mvc扩展

    背景 由于MVC的前端是基于jquery.validate和jquery.validate.unobtrusive来实现的,但是当我们要使用其他的ui组件且组件本身就带有完整的验证功能的话,那么要让它 ...

  2. 基于easyui的webform扩展(续)

    基于easyui的webform扩展(续) 回顾 <前端基于easyui的mvc扩展>.<前端基于easyui的mvc扩展(续)>.<基于easyui的webform扩展 ...

  3. 基于easyui的webform扩展

    基于easyui的webform扩展 回顾 <前端基于easyui的mvc扩展>.<前端基于easyui的mvc扩展(续)>前两篇介绍了mvc内如何基于easyui进行扩展,在 ...

  4. 基于easyui的验证扩展

    基于easyui的验证扩展 ##前言 自己做项目也有好几年的时间了,一直没有时间整理自己的代码,趁春节比较闲,把自己以前的代码整理了一篇.这是基于easyui1.2.6的一些验证扩展,2012年就开始 ...

  5. 基于easyui与MVC的前端界面

    1.登录界面: 2.主界面: 下载源码

  6. 快速开发框架,及库存管理系统,基于easyui框架和C#语言MVC、EntityFrameWork、T4模板技术。

    快速开发框架,及库存管理系统,基于easyui框架和C#语言MVC.EntityFrameWork.T4模板技术. 产品界面如下图所示: 源码结构: 开放全部源码,如有需要请联系,QQ:1107141 ...

  7. 使用Asp.Net Core MVC 开发项目实践[第四篇:基于EF Core的扩展2]

    上篇我们说到了基于EFCore的基础扩展,这篇我们讲解下基于实体结合拉姆达表达式的自定义更新以及删除数据. 先说下原理:其实通过实体以及拉姆达表达式生成SQL语句去执行 第一种更新扩展: 自定义更新字 ...

  8. EasyUI + Spring MVC + hibernate实现增删改查导入导出

    (这是一个故事--) 前言 作为一个JAVA开发工程师,我觉得最基本是需要懂前端.后台以及数据库. 练习的内容很基础,包括:基本增删改查.模糊查询.分页查询.树菜单.上传下载.tab页 主管发我一个已 ...

  9. 基于存储过程的MVC开源分页控件--LYB.NET.SPPager

    摘要 现在基于ASP.NET MVC的分页控件我想大家都不陌生了,百度一下一大箩筐.其中有不少精品,陕北吴旗娃杨涛大哥做的分页控件MVCPager(http://www.webdiyer.com/)算 ...

随机推荐

  1. MongoDB在window下的安装

    1.下载mongodb的windows版本号,有32位和64位版本号,依据系统情况下载,下载地址:http://www.mongodb.org/downloads 2.解压缩至D:/mongodb就可 ...

  2. 【百度地图API】北京周边7日游——图标按路线轨迹行动

    原文:[百度地图API]北京周边7日游--图标按路线轨迹行动 任务描述: 春节就要来啦~酸奶小妹的妈妈要从遥远的重庆,来到北京过春节呢!酸奶小妹忙着给妈妈计划,北京周边的旅游线路.计划好路线后,就开始 ...

  3. 音乐TV2015校园招聘A第二大发行量(对中国科学院大学站)

    标题叙述性说明:鉴于阵列A,尺寸n,数组元素1至n数位,但是,一些数字多次出现,有些数字不出现.请设计算法和程序.统计数据不会出现什么.什么号码多次出现. 您可以O(n)时间复杂度,O(1)求下完毕么 ...

  4. NSNotification、delegate和KVO的区别

    1.效率:delegate比nsnotification高.2. delegate方法比notification更加直接,最典型的特征是,delegate方法往往需要关注返回值, 也就是delegat ...

  5. java环境变量配置四种方法

    原文:java环境变量配置四种方法 Java编程首要工作就是安装JDK(Java Development Kit).一通“NEXT”点完安装后就是最重要的环境变量设置了.也许有人会问为什么要设置环境变 ...

  6. C#正则学习

    正则的力量无法小觑,短短的几个字符,往往胜过几十行的代码,大大可以简化我们冗余的代码. 以前在js里用正则比较多,今天来熟悉下C#中正则的使用方法,权当笔记了! 如果把正则当做一门语言的话,那么正则的 ...

  7. View中的Razor使用

    View中的Razor使用   上一节:ASP.NET MVC5 + EF6 入门教程 (5) Model和Entity Framework 源码下载:点我下载 一.Razor简介 在解决方案资源管理 ...

  8. hadoop搭建开发环境及编写Hello World

    hadoop搭建开发环境及编写Hello World   本文地址:http://www.cnblogs.com/archimedes/p/hadoop-helloworld.html,转载请注明源地 ...

  9. CSS3 Media Queries 详细介绍与使用方法

    Media Queries 就是要在支援CSS3 的浏览器中才能正常工作,IE8 以下不支持. 而Media Queries 的套用方法千变万化,要套用在什么样的装置中,都可以自己来定义. 到底什么是 ...

  10. linuxsocket通信recv研究缓存机制

        曾有过这样一个小疑问.当一个进程注册的插座后,,假设插座没有被调用recv函数接受包.能接受到数据包吗? 或者这样说,假设我的程序注冊了一个套接字去接受数据包,可是每收到一个数据包都须要非常长 ...