JQuery EasyUI类库,大家不会陌生,出来已经有很多年了。个人感觉还是很好用的,作者更新频率也很快,bug也及时修复。

  最近在整理以前的代码,找到了这个组件,它是将EasyUI组件封装成MVC控件,这样我们就可以不用写那些html标签了,我们先看看调用方式

<form id="form1">
@Html.HiddenFor(c => c.ID)
@Html.HiddenFor(c => c.EditMode)
@Html.HiddenFor(c => c.CodeTypeID)
@Html.HiddenFor(c => c.CreateUserID)
<table border="1" style="width: 100%;">
<tr>
<td style="width: 100px;">@Html.EasyUI().LabelFor(c => c.CodeID).Required(true)</td>
<td>@Html.EasyUI().ValidateBoxFor(c => c.CodeID).Required(true).Width("60%")</td>
</tr>
<tr>
<td>@Html.EasyUI().LabelFor(c => c.CodeName).Required(true)</td>
<td>@Html.EasyUI().ValidateBoxFor(c => c.CodeName).Required(true).Width("60%")</td>
</tr>
<tr>
<td>@Html.EasyUI().LabelFor(c => c.CodeTypeName)</td>
<td>@Html.DisplayFor(c => c.CodeTypeName)</td>
</tr>
<tr>
<td>@Html.EasyUI().LabelFor(c => c.IsUsed)</td>
<td>@Html.DropDownListMetaCodeFor(c => c.IsUsed, MetaSourceType.Null, string.Empty, new{ @style = "width:60%;" })</td>
</tr>
<tr>
<td>@Html.EasyUI().LabelFor(c => c.SortOrder)</td>
<td>@Html.EasyUI().NumberBoxFor(c => c.SortOrder).Min(10).Value(10).Width("60%")</td>
</tr>
<tr>
<td>@Html.EasyUI().LabelFor(c => c.CreateUserName)</td>
<td>@Html.EasyUI().ValidateBoxFor(c => c.CreateUserName).Width("60%")</td>
</tr>
<tr>
<td>@Html.EasyUI().LabelFor(c => c.CreateTime)</td>
<td>@Html.EasyUI().DateBoxFor(c => c.CreateTime)</td>
</tr>
</table>
</form>

  

  我们再来看看代码是如何实现的,下面是整个项目布局

  其实代码不复杂,最关键的是TagElementBuilder.cs这个类

using System;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace NS.Utility.EasyUI
{
public abstract class TagElementBuilder<T> : IHtmlString where T : class
{
#region 私有变量
private TagBuilder tagBuilder;
#endregion #region 公有属性
/// <summary>
/// 组件Tag标签类型.包括input,select,label等
/// </summary>
public abstract string TagName { get; } /// <summary>
/// Tag标签组装类
/// </summary>
protected TagBuilder TagBuilder
{
get
{
if (this.tagBuilder != null)
return this.tagBuilder;
return this.tagBuilder = new TagBuilder(TagName);
}
}
#endregion #region 私有方法
/// <summary>
/// 判断class名称是否存在
/// </summary>
/// <param name="className"></param>
/// <returns></returns>
private bool ContainsClass(string className)
{
string classs;
if (!TagBuilder.Attributes.TryGetValue("class", out classs))
{
return false;
} var classArray = classs.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToArray();
return classArray.Any(i => string.Equals(i, className, StringComparison.OrdinalIgnoreCase));
}
#endregion #region 公有方法 /// <summary>
/// 设置ID属性值
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public T ID(string id)
{
this.TagBuilder.GenerateId(id);
return this as T;
} /// <summary>
/// 设置Name属性值
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public T Name(string name)
{
this.TagBuilder.MergeAttribute("name", name, true);
return this as T;
} /// <summary>
/// 设置Attribute属性列表
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="replaceExisting"></param>
/// <returns></returns>
public T Attribute(string key, string value, bool replaceExisting = false)
{
this.TagBuilder.MergeAttribute(key, value, replaceExisting);
return this as T;
} /// <summary>
/// 增加class属性值
/// </summary>
/// <param name="className"></param>
/// <returns></returns>
public T AddClass(string className)
{
if (string.IsNullOrWhiteSpace(className))
{
return this as T;
} if (ContainsClass(className))
{
return this as T;
} TagBuilder.AddCssClass(className);
return this as T;
} /// <summary>
/// 删除class属性值
/// </summary>
/// <param name="className"></param>
/// <returns></returns>
public T RemoveClass(string className)
{
if (string.IsNullOrWhiteSpace(className))
{
return this as T;
} if (!ContainsClass(className))
{
return this as T;
} var classs = TagBuilder.Attributes["class"]; var classArray = classs.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
.Where(i => string.Equals(i, className, StringComparison.OrdinalIgnoreCase)); TagBuilder.Attributes["class"] = string.Join(" ", classArray);
return this as T;
} /// <summary>
/// 合并class属性值
/// </summary>
/// <param name="className"></param>
/// <returns></returns>
public T ToggleClass(string className)
{
if (string.IsNullOrWhiteSpace(className))
{
return this as T;
} return ContainsClass(className) ? RemoveClass(className) : AddClass(className);
}
#endregion #region 抽象方法
/// <summary>
/// 返回HTML编码的字符串(子类必须重写)
/// </summary>
/// <returns></returns>
public abstract string ToHtmlString();
#endregion
}
}

  

  再看看具体是如何实现的?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mvc;
using System.Web.Mvc.Html; namespace NS.Utility.EasyUI
{
public class ComboBoxBuilder : TagElementBuilder<ComboBoxBuilder>
{
#region 私有变量
private bool required = false;
private string valueField = string.Empty;
private string textField = string.Empty;
private string groupField = string.Empty;
private string groupFormatter = string.Empty;
private EasyUIComboBoxMode mode = EasyUIComboBoxMode.local;
private string url = string.Empty;
private EasyUIComboBoxMethod method = EasyUIComboBoxMethod.post;
private string data = string.Empty;
private string filter = string.Empty;
private string formatter = string.Empty;
private string loader = string.Empty;
private string loadFilter = string.Empty; private string onBeforeLoad = string.Empty;
private string onLoadSuccess = string.Empty;
private string onLoadError = string.Empty;
private string onSelect = string.Empty;
private string onUnselect = string.Empty;
#endregion #region 公有方法
public ComboBoxBuilder Required(bool required)
{
this.required = required;
return this;
}
public ComboBoxBuilder ValueField(string valueField)
{
this.valueField = valueField;
return this;
}
public ComboBoxBuilder TextField(string textField)
{
this.textField = textField;
return this;
}
public ComboBoxBuilder GroupField(string groupField)
{
this.groupField = groupField;
return this;
}
public ComboBoxBuilder GroupFormatter(string groupFormatter)
{
this.groupFormatter = groupFormatter;
return this;
}
public ComboBoxBuilder Mode(EasyUIComboBoxMode mode)
{
this.mode = mode;
return this;
}
public ComboBoxBuilder Url(string url)
{
this.url = url;
return this;
}
public ComboBoxBuilder Method(EasyUIComboBoxMethod method)
{
this.method = method;
return this;
}
public ComboBoxBuilder Data(string data)
{
this.data = data;
return this;
}
public ComboBoxBuilder Filter(string filter)
{
this.filter = filter;
return this;
}
public ComboBoxBuilder Formatter(string formatter)
{
this.formatter = formatter;
return this;
}
public ComboBoxBuilder Loader(string loader)
{
this.loader = loader;
return this;
}
public ComboBoxBuilder LoadFilter(string loadFilter)
{
this.loadFilter = loadFilter;
return this;
} public ComboBoxBuilder OnBeforeLoad(string onBeforeLoad)
{
this.onBeforeLoad = onBeforeLoad;
return this;
}
public ComboBoxBuilder OnLoadSuccess(string onLoadSuccess)
{
this.onLoadSuccess = onLoadSuccess;
return this;
}
public ComboBoxBuilder OnLoadError(string onLoadError)
{
this.onLoadError = onLoadError;
return this;
}
public ComboBoxBuilder OnSelect(string onSelect)
{
this.onSelect = onSelect;
return this;
}
public ComboBoxBuilder OnUnselect(string onUnselect)
{
this.onUnselect = onUnselect;
return this;
}
#endregion #region TagElementBuilder 重写属性和方法
public override string TagName
{
get { return "input"; }
} public override string ToHtmlString()
{
//参考格式:<input id="cc" class="easyui-combobox" name="dept" data-options="valueField:'id',textField:'text',url:'get_data.php'" /> //拼接class属性值
TagBuilder.AddCssClass("easyui-combobox"); //拼接data-options属性值
List<string> listAttri = new List<string>(); //开始拼接各种属性值
if (this.required == true)
{
//是否必输项
listAttri.Add(string.Format("required:{0}", this.required.ToString().ToLower()));
}
if (string.IsNullOrEmpty(this.valueField) == false)
{
listAttri.Add(string.Format("valueField:'{0}'", this.valueField));
}
if (string.IsNullOrEmpty(this.textField) == false)
{
listAttri.Add(string.Format("textField:'{0}'", this.textField));
}
if (string.IsNullOrEmpty(this.groupField) == false)
{
}
if (this.mode != EasyUIComboBoxMode.local)
{
}
if (string.IsNullOrEmpty(this.url) == false)
{
listAttri.Add(string.Format("url:'{0}'", this.url));
}
if (this.method == EasyUIComboBoxMethod.get)
{
}
if (string.IsNullOrEmpty(this.data) == false)
{
}
if (string.IsNullOrEmpty(this.filter) == false)
{
}
if (string.IsNullOrEmpty(this.formatter) == false)
{
}
if (string.IsNullOrEmpty(this.loader) == false)
{
}
if (string.IsNullOrEmpty(this.loadFilter) == false)
{
} //开始拼接各种事件
if (string.IsNullOrEmpty(this.onBeforeLoad) == false)
{
}
if (string.IsNullOrEmpty(this.onLoadSuccess) == false)
{
}
if (string.IsNullOrEmpty(this.onLoadError) == false)
{
}
if (string.IsNullOrEmpty(this.onSelect) == false)
{
}
if (string.IsNullOrEmpty(this.onUnselect) == false)
{
} string dataOptions = string.Join(",", listAttri.ToArray());
TagBuilder.Attributes.Add("data-options", dataOptions); var builder = new StringBuilder();
var tagHtml = TagBuilder.ToString(TagRenderMode.SelfClosing);
builder.AppendLine(tagHtml); return new MvcHtmlString(builder.ToString()).ToHtmlString();
}
#endregion
}
}

  看,其实并不复杂吧,完整源码是必须提供的

源码下载方式
1,关注微信公众号:小特工作室(也可直接扫描签名处二维码)
2,发送:示例4011
即可下载 

基于JQuery EasyUI的WebMVC控件封装(含源码)的更多相关文章

  1. jquery easyui datebox 时间控件默认显示当前日期的实现方法

    jquery easyui datebox 时间控件默认显示当前日期的实现方法 直接class easyui-datebox后添加一个value="true"就可以

  2. jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法

    博客分类: jquery-easyui jQueryAjax框架HTML  现象: AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout ...

  3. 国籍控件(js源码)

    国籍控件(js源码) 一直苦于没有好的国籍控件可以用,于是抽空写了一个国籍控件,现分享给大家. 主要功能和界面介绍 国籍控件主要支持中文.英文过滤以及键盘上下事件. 源码介绍 国籍控件核心是两个文件, ...

  4. 在Winform窗体中使用WPF控件(附源码)

    原文:在Winform窗体中使用WPF控件(附源码) 今天是礼拜6,下雨,没有外出,闲暇就写一篇博文讲下如何在Winform中使用WPF控件.原有是我在百度上搜索相关信息无果,遂干脆动手自己实现. W ...

  5. Jquery easyui的validatebox控件和正则表达式

    http://blog.csdn.net/dandanzmc/article/details/36421465 仔细观察jquery.validatebox.js文件,会发现它的验证其实还是采用的正则 ...

  6. Python 基于python实现的http接口自动化测试框架(含源码)

    基于python实现的http+json协议接口自动化测试框架(含源码) by:授客 QQ:1033553122      欢迎加入软件性能测试交流 QQ群:7156436  由于篇幅问题,采用百度网 ...

  7. 打造基于jQuery的日期选择控件

    终于把jQuery拼写正确了哈,哈哈javascript也是区分大小写的,所以确实不能写错,今天我来和大家分享的是日期选择控件的实现,功能也许不够强大,但是能够满足需求. 我之前也写过(正确的说是改过 ...

  8. 基于Jquery的文本提示控件 poshytip

    Html中,如设置了title的属性,则当鼠标在该对象上面短暂的停留时,会显示预设的文本提示,但,这些效果只会短暂的显示,一会就会消失,又要重新把鼠标移出再移回来才被显示,样式也无法重写,实在是恼人之 ...

  9. 福利到~分享一个基于jquery的智能提示控件intellSeach.js

    一.需求 我们经常会遇到[站内搜索]的需求,为了提高用户体验,我们希望能做到像百度那样的即时智能提示.例如:某公司人事管理系统,想搜索李XX,只要输入“李”,系统自然会提示一些姓李的员工,这样方便用户 ...

随机推荐

  1. java 基础语法 1

    一.标识符 二.关键字 三.JAVA基础数据类型 3.1. java常量 3.2. java变量 从本质上来讲,变量其实是内存里面的一小块区域,一个程序在运行的时候,实际上这个程序是位于内存里面,然后 ...

  2. websocket的理解及实例应用

    websocket协议是HTML5提出的一个新的规范,主要用于实现服务器及时推送信息给客户端的功能. websocket实现是基于HTTP协议的部分握手功能,但是websocket仅仅握手一次即可进行 ...

  3. AngularJS–service(服务)

    点击查看AngularJS系列目录 转载请注明出处:http://www.cnblogs.com/leosx/ 服务 Angular的服务也是使用依赖注入(dependency injection ( ...

  4. Linux命令行与脚本编程大全第一章

    1, 2,linux内核:内存管理.进程管理.文件管理.设备管理. 其中内存管理如下图: 通过命令 cat/proc/meminfo查看系统的内存状态.通过ipcs查看共享内存.信号量.消息队列信息. ...

  5. Milk Patterns poj3261(后缀数组)

    Milk Patterns Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 9274   Accepted: 4173 Cas ...

  6. python GUI实战项目——tkinter库的简单实例

    一.项目说明: 本次通过实现一个小的功能模块对Python GUI进行实践学习.项目来源于软件制造工程的作业.记录在这里以复习下思路和总结编码过程.所有的源代码和文件放在这里: 链接: https:/ ...

  7. Kotlin实现《第一行代码》案例“酷欧天气”

    看过<第一行代码>的朋友应该知道“酷欧天气”,作者郭神用整整一章的内容来讲述其从无到有的过程. 最近正好看完该书的第二版(也有人称“第二行代码”),尝试着将项目中的Java代码用Kotli ...

  8. ios实现无限后台任务

    需求 我们的app是使用心跳机制来保持用户的登陆状态,这样才能收到服务器发来的消息和命令,但是当app进入后台以后大约3分钟或者10分钟之后app就会被系统挂起,用户就会超时下线,这样就必须保持app ...

  9. C语言判断电脑的大、小端机

    #include int main() { int x = 0x1234; if (char(x) == 0x34)  {   printf("小端机!\n");  }  else ...

  10. 使用Gradle构建Android项目

    阅读目录 Gradle是什么? 环境需求 Gradle基本结构 任务task的执行 基本的构建定制 目录配置 签名配置 代码混淆设置 依赖配置 输出不同配置的应用 生成多个渠道包(以Umeng为例) ...