<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_雪雁</title><subtitle type="text">人之所以能，是因为相信能！</subtitle><id>http://feed.cnblogs.com/blog/u/88572/rss</id><updated>2012-04-09T15:33:50Z</updated><author><name>雪雁</name><uri>http://www.cnblogs.com/codelove/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/codelove/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/88572/rss"/><entry><id>http://www.cnblogs.com/codelove/archive/2012/04/09/2439784.html</id><title type="text">JQuery EasyUi之界面设计——母版页以及Ajax的通用处理（三）</title><summary type="text">前面介绍过JS了，就这样个人认为还不够用。因为JS文件是死的，无法使用服务器代码，自然不够灵活。那么通过母版页就完善了这一点。那么下面举一个例子——控件赋值。控件赋值前面说过easyui的form自带验证、提交、重置与赋值，那么如何利用这个赋值呢？千篇一律的写赋值代码总是那么的令人厌烦，尤其是元素比较多的时候，用反射嘛又怕别人诟病，那么就用JS来负责这一切吧.那么如何做到通用呢？那母版页就是不错的选择。下面贴出母版页完整代码： 1: &lt;%@ Master Language="C#" AutoEventWireup="true" CodeBehind</summary><published>2012-04-09T15:32:00Z</published><updated>2012-04-09T15:32:00Z</updated><author><name>雪雁</name><uri>http://www.cnblogs.com/codelove/</uri></author><link rel="alternate" href="http://www.cnblogs.com/codelove/archive/2012/04/09/2439784.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/codelove/archive/2012/04/09/2439784.html"/><content type="html">&lt;p&gt;前面介绍过JS了，就这样个人认为还不够用。&lt;/p&gt;&lt;p&gt;因为JS文件是死的，无法使用服务器代码，自然不够灵活。那么通过母版页就完善了这一点。那么下面举一个例子&amp;mdash;&amp;mdash;控件赋值。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;控件赋值&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;前面说过easyui的form自带验证、提交、重置与赋值，那么如何利用这个赋值呢？千篇一律的写赋值代码总是那么的令人厌烦，尤其是元素比较多的时候，用反射嘛又怕别人诟病，那么就用JS来负责这一切吧.&lt;/p&gt;&lt;p&gt;那么如何做到通用呢？那母版页就是不错的选择。&lt;/p&gt;&lt;p&gt;下面贴出母版页完整代码：&lt;/p&gt;&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;&lt;div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; &amp;lt;%@ Master Language=&lt;span style="color: #006080;"&gt;"C#"&lt;/span&gt; AutoEventWireup=&lt;span style="color: #006080;"&gt;"true"&lt;/span&gt; CodeBehind=&lt;span style="color: #006080;"&gt;"Form.master.cs"&lt;/span&gt; Inherits=&lt;span style="color: #006080;"&gt;"Singer.Form"&lt;/span&gt; %&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt;  &lt;!--CRLF--&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt; &amp;lt;!DOCTYPE html PUBLIC &lt;span style="color: #006080;"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN"&lt;/span&gt; &lt;span style="color: #006080;"&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&lt;/span&gt;&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt; &amp;lt;html xmlns=&lt;span style="color: #006080;"&gt;"http://www.w3.org/1999/xhtml"&lt;/span&gt;&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt; &amp;lt;head runat=&lt;span style="color: #006080;"&gt;"server"&lt;/span&gt;&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum6" style="color: #606060;"&gt;   6:&lt;/span&gt;     &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum7" style="color: #606060;"&gt;   7:&lt;/span&gt;     &amp;lt;link href=&lt;span style="color: #006080;"&gt;"/Scripts/jquery-easyui-1.2.5/themes/default/easyui.css"&lt;/span&gt; rel=&lt;span style="color: #006080;"&gt;"stylesheet"&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum8" style="color: #606060;"&gt;   8:&lt;/span&gt;         type=&lt;span style="color: #006080;"&gt;"text/css"&lt;/span&gt; /&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum9" style="color: #606060;"&gt;   9:&lt;/span&gt;     &amp;lt;link href=&lt;span style="color: #006080;"&gt;"/Styles/form.css"&lt;/span&gt; rel=&lt;span style="color: #006080;"&gt;"stylesheet"&lt;/span&gt; type=&lt;span style="color: #006080;"&gt;"text/css"&lt;/span&gt; /&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum10" style="color: #606060;"&gt;  10:&lt;/span&gt;     &amp;lt;link href=&lt;span style="color: #006080;"&gt;"/Scripts/jquery-easyui-1.2.5/themes/icon.css"&lt;/span&gt; rel=&lt;span style="color: #006080;"&gt;"stylesheet"&lt;/span&gt; type=&lt;span style="color: #006080;"&gt;"text/css"&lt;/span&gt; /&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum11" style="color: #606060;"&gt;  11:&lt;/span&gt;     &amp;lt;script src=&lt;span style="color: #006080;"&gt;"/Scripts/jquery-1.7.1.min.js"&lt;/span&gt; type=&lt;span style="color: #006080;"&gt;"text/javascript"&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum12" style="color: #606060;"&gt;  12:&lt;/span&gt;     &amp;lt;script src=&lt;span style="color: #006080;"&gt;"/Scripts/jquery-easyui-1.2.5/jquery.easyui.min.js"&lt;/span&gt; type=&lt;span style="color: #006080;"&gt;"text/javascript"&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum13" style="color: #606060;"&gt;  13:&lt;/span&gt;     &amp;lt;script src=&lt;span style="color: #006080;"&gt;"/Scripts/jquery-easyui-1.2.5/locale/easyui-lang-zh_CN.js"&lt;/span&gt; type=&lt;span style="color: #006080;"&gt;"text/javascript"&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum14" style="color: #606060;"&gt;  14:&lt;/span&gt;     &amp;lt;script src=&lt;span style="color: #006080;"&gt;"/Scripts/common.js"&lt;/span&gt; type=&lt;span style="color: #006080;"&gt;"text/javascript"&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum15" style="color: #606060;"&gt;  15:&lt;/span&gt;     &amp;lt;asp:ContentPlaceHolder ID=&lt;span style="color: #006080;"&gt;"head"&lt;/span&gt; runat=&lt;span style="color: #006080;"&gt;"server"&lt;/span&gt;&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum16" style="color: #606060;"&gt;  16:&lt;/span&gt;     &amp;lt;/asp:ContentPlaceHolder&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum17" style="color: #606060;"&gt;  17:&lt;/span&gt; &amp;lt;/head&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum18" style="color: #606060;"&gt;  18:&lt;/span&gt; &amp;lt;body&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum19" style="color: #606060;"&gt;  19:&lt;/span&gt;     &amp;lt;script type=&lt;span style="color: #006080;"&gt;"text/javascript"&lt;/span&gt;&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum20" style="color: #606060;"&gt;  20:&lt;/span&gt;         var ajaxUrl = &lt;span style="color: #006080;"&gt;'/Ajax/Common.ashx'&lt;/span&gt;;&lt;!--CRLF--&gt;&lt;span id="lnum21" style="color: #606060;"&gt;  21:&lt;/span&gt;         &lt;span style="color: #008000;"&gt;//表单ID&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum22" style="color: #606060;"&gt;  22:&lt;/span&gt;         var id = &lt;span style="color: #006080;"&gt;'&amp;lt;%=Request.QueryString["ID"] %&amp;gt;'&lt;/span&gt;;&lt;!--CRLF--&gt;&lt;span id="lnum23" style="color: #606060;"&gt;  23:&lt;/span&gt;         &lt;span style="color: #008000;"&gt;//是否自动加载表单，编辑用&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum24" style="color: #606060;"&gt;  24:&lt;/span&gt;         var autoLoad = &lt;span style="color: #006080;"&gt;'&amp;lt;%=Request.QueryString["autoLoad"] %&amp;gt;'&lt;/span&gt;;&lt;!--CRLF--&gt;&lt;span id="lnum25" style="color: #606060;"&gt;  25:&lt;/span&gt;         &lt;span style="color: #008000;"&gt;//Ajax类型【页面名】&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum26" style="color: #606060;"&gt;  26:&lt;/span&gt;         var typeCode = &lt;span style="color: #006080;"&gt;"&amp;lt;%=System.IO.Path.GetFileName(HttpContext.Current.Request.Path) %&amp;gt;"&lt;/span&gt;;&lt;!--CRLF--&gt;&lt;span id="lnum27" style="color: #606060;"&gt;  27:&lt;/span&gt;         $(function () {&lt;!--CRLF--&gt;&lt;span id="lnum28" style="color: #606060;"&gt;  28:&lt;/span&gt;             &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; ($.isFunction(window.setAjaxUrl)) {&lt;!--CRLF--&gt;&lt;span id="lnum29" style="color: #606060;"&gt;  29:&lt;/span&gt;                 setAjaxUrl.call();&lt;!--CRLF--&gt;&lt;span id="lnum30" style="color: #606060;"&gt;  30:&lt;/span&gt;             }&lt;!--CRLF--&gt;&lt;span id="lnum31" style="color: #606060;"&gt;  31:&lt;/span&gt;             &lt;span style="color: #008000;"&gt;//加载数据&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum32" style="color: #606060;"&gt;  32:&lt;/span&gt;             &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (autoLoad == 1 &amp;amp;&amp;amp; id !== undefined &amp;amp;&amp;amp; id != &lt;span style="color: #006080;"&gt;''&lt;/span&gt;) {&lt;!--CRLF--&gt;&lt;span id="lnum33" style="color: #606060;"&gt;  33:&lt;/span&gt;                 $(&lt;span style="color: #006080;"&gt;'#ff'&lt;/span&gt;).form(&lt;span style="color: #006080;"&gt;'load'&lt;/span&gt;, ajaxUrl + &lt;span style="color: #006080;"&gt;'?autoLoad=1&amp;amp;Type='&lt;/span&gt; + typeCode + &lt;span style="color: #006080;"&gt;'&amp;amp;id='&lt;/span&gt; + id + &lt;span style="color: #006080;"&gt;"&amp;amp;_"&lt;/span&gt; + Math.floor(Math.random() * (1000 + 1)));&lt;!--CRLF--&gt;&lt;span id="lnum34" style="color: #606060;"&gt;  34:&lt;/span&gt;  &lt;!--CRLF--&gt;&lt;span id="lnum35" style="color: #606060;"&gt;  35:&lt;/span&gt;             }&lt;!--CRLF--&gt;&lt;span id="lnum36" style="color: #606060;"&gt;  36:&lt;/span&gt;         });&lt;!--CRLF--&gt;&lt;span id="lnum37" style="color: #606060;"&gt;  37:&lt;/span&gt;     &amp;lt;/script&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum38" style="color: #606060;"&gt;  38:&lt;/span&gt;     &amp;lt;asp:ContentPlaceHolder ID=&lt;span style="color: #006080;"&gt;"ContentPlaceHolder1"&lt;/span&gt; runat=&lt;span style="color: #006080;"&gt;"server"&lt;/span&gt;&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum39" style="color: #606060;"&gt;  39:&lt;/span&gt;     &amp;lt;/asp:ContentPlaceHolder&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum40" style="color: #606060;"&gt;  40:&lt;/span&gt; &amp;lt;/body&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum41" style="color: #606060;"&gt;  41:&lt;/span&gt; &amp;lt;/html&amp;gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;从代码中可以看出:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;页面上定义了3个全局JS变量，有注释，我就不赘述了。&lt;/li&gt;&lt;li&gt;setAjaxUrl函数在表单赋值加载前执行，可以实现用于更改上面的3个变量的值，或者作其他作用，建议命名为beforeFormLoad。&lt;/li&gt;&lt;li&gt;typeCode的值为页面名，比如&amp;ldquo;index.aspx&amp;rdquo;，提交给处理程序用于判断是哪个页面，以便返回对应的JSON数据。&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;后台处理逻辑&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;那么处理程序如何返回对应的JSON数据呢？先看看大体结构：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201204/201204092331357621.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201204/201204092331364000.png" alt="image" width="722" height="410" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;&lt;div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; &lt;span style="color: #006080;"&gt;"ADMINUSER_ADD.ASPX"&lt;/span&gt;:&lt;!--CRLF--&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt;     &lt;span style="color: #cc6633;"&gt;#region&lt;/span&gt; 用户添加&lt;!--CRLF--&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt;     {&lt;!--CRLF--&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt;         &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (context.Request[&lt;span style="color: #006080;"&gt;"autoLoad"&lt;/span&gt;] == &lt;span style="color: #006080;"&gt;"1"&lt;/span&gt;)&lt;!--CRLF--&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt;             context.Response.Write(db.TB_Admin.FirstOrDefault(p =&amp;gt; p.ID == Convert.ToInt32(context.Request[&lt;span style="color: #006080;"&gt;"id"&lt;/span&gt;])).ToJson());&lt;!--CRLF--&gt;&lt;span id="lnum6" style="color: #606060;"&gt;   6:&lt;/span&gt;         &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum7" style="color: #606060;"&gt;   7:&lt;/span&gt;         {&lt;!--CRLF--&gt;&lt;span id="lnum8" style="color: #606060;"&gt;   8:&lt;/span&gt;             &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (context.Request[&lt;span style="color: #006080;"&gt;"id"&lt;/span&gt;].IsEmpty())&lt;!--CRLF--&gt;&lt;span id="lnum9" style="color: #606060;"&gt;   9:&lt;/span&gt;             {&lt;!--CRLF--&gt;&lt;span id="lnum10" style="color: #606060;"&gt;  10:&lt;/span&gt;                 &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (context.Request[&lt;span style="color: #006080;"&gt;"AdminPassword"&lt;/span&gt;].Trim() == &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;.Empty)&lt;!--CRLF--&gt;&lt;span id="lnum11" style="color: #606060;"&gt;  11:&lt;/span&gt;                 {&lt;!--CRLF--&gt;&lt;span id="lnum12" style="color: #606060;"&gt;  12:&lt;/span&gt;                     context.Response.Write(&lt;span style="color: #006080;"&gt;"请输入密码！！"&lt;/span&gt;);&lt;!--CRLF--&gt;&lt;span id="lnum13" style="color: #606060;"&gt;  13:&lt;/span&gt;                     &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;!--CRLF--&gt;&lt;span id="lnum14" style="color: #606060;"&gt;  14:&lt;/span&gt;                 }&lt;!--CRLF--&gt;&lt;span id="lnum15" style="color: #606060;"&gt;  15:&lt;/span&gt;                 &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (context.Request[&lt;span style="color: #006080;"&gt;"AdminPassword"&lt;/span&gt;] != context.Request[&lt;span style="color: #006080;"&gt;"AdminPassword2"&lt;/span&gt;])&lt;!--CRLF--&gt;&lt;span id="lnum16" style="color: #606060;"&gt;  16:&lt;/span&gt;                 {&lt;!--CRLF--&gt;&lt;span id="lnum17" style="color: #606060;"&gt;  17:&lt;/span&gt;                     context.Response.Write(&lt;span style="color: #006080;"&gt;"两次密码不一致！！"&lt;/span&gt;);&lt;!--CRLF--&gt;&lt;span id="lnum18" style="color: #606060;"&gt;  18:&lt;/span&gt;                     &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;!--CRLF--&gt;&lt;span id="lnum19" style="color: #606060;"&gt;  19:&lt;/span&gt;                 }&lt;!--CRLF--&gt;&lt;span id="lnum20" style="color: #606060;"&gt;  20:&lt;/span&gt;                 var isExist = db.TB_Admin.FirstOrDefault(p =&amp;gt; p.AdminLogin == context.Request[&lt;span style="color: #006080;"&gt;"AdminLogin"&lt;/span&gt;].Trim());&lt;!--CRLF--&gt;&lt;span id="lnum21" style="color: #606060;"&gt;  21:&lt;/span&gt;                 &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (isExist != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;!--CRLF--&gt;&lt;span id="lnum22" style="color: #606060;"&gt;  22:&lt;/span&gt;                 {&lt;!--CRLF--&gt;&lt;span id="lnum23" style="color: #606060;"&gt;  23:&lt;/span&gt;                     context.Response.Write(&lt;span style="color: #006080;"&gt;"用户名重复！！"&lt;/span&gt;);&lt;!--CRLF--&gt;&lt;span id="lnum24" style="color: #606060;"&gt;  24:&lt;/span&gt;                     &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;!--CRLF--&gt;&lt;span id="lnum25" style="color: #606060;"&gt;  25:&lt;/span&gt;                 }&lt;!--CRLF--&gt;&lt;span id="lnum26" style="color: #606060;"&gt;  26:&lt;/span&gt;                 TB_Admin singer = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; TB_Admin()&lt;!--CRLF--&gt;&lt;span id="lnum27" style="color: #606060;"&gt;  27:&lt;/span&gt;                 {&lt;!--CRLF--&gt;&lt;span id="lnum28" style="color: #606060;"&gt;  28:&lt;/span&gt;                     Defatulflag = context.Request[&lt;span style="color: #006080;"&gt;"Defatulflag"&lt;/span&gt;] == &lt;span style="color: #006080;"&gt;"1"&lt;/span&gt; ? 1 : 0,&lt;!--CRLF--&gt;&lt;span id="lnum29" style="color: #606060;"&gt;  29:&lt;/span&gt;                     AdminLogin = context.Request[&lt;span style="color: #006080;"&gt;"AdminLogin"&lt;/span&gt;].Trim(),&lt;!--CRLF--&gt;&lt;span id="lnum30" style="color: #606060;"&gt;  30:&lt;/span&gt;                     CreateBy = userID.ToString(),&lt;!--CRLF--&gt;&lt;span id="lnum31" style="color: #606060;"&gt;  31:&lt;/span&gt;                     CreateDate = DateTime.Now,&lt;!--CRLF--&gt;&lt;span id="lnum32" style="color: #606060;"&gt;  32:&lt;/span&gt;                     LastLoginDate = &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;,&lt;!--CRLF--&gt;&lt;span id="lnum33" style="color: #606060;"&gt;  33:&lt;/span&gt;                     Password = Utility.UserINFOManager.PasswordEncry(context.Request[&lt;span style="color: #006080;"&gt;"AdminPassword"&lt;/span&gt;].Trim()),&lt;!--CRLF--&gt;&lt;span id="lnum34" style="color: #606060;"&gt;  34:&lt;/span&gt;                     RoleID = Convert.ToInt32(context.Request[&lt;span style="color: #006080;"&gt;"RoleID"&lt;/span&gt;])&lt;!--CRLF--&gt;&lt;span id="lnum35" style="color: #606060;"&gt;  35:&lt;/span&gt;                 };&lt;!--CRLF--&gt;&lt;span id="lnum36" style="color: #606060;"&gt;  36:&lt;/span&gt;                 db.TB_Admin.InsertOnSubmit(singer);&lt;!--CRLF--&gt;&lt;span id="lnum37" style="color: #606060;"&gt;  37:&lt;/span&gt;                 db.SubmitChanges();&lt;!--CRLF--&gt;&lt;span id="lnum38" style="color: #606060;"&gt;  38:&lt;/span&gt;             }&lt;!--CRLF--&gt;&lt;span id="lnum39" style="color: #606060;"&gt;  39:&lt;/span&gt;             &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum40" style="color: #606060;"&gt;  40:&lt;/span&gt;             {&lt;!--CRLF--&gt;&lt;span id="lnum41" style="color: #606060;"&gt;  41:&lt;/span&gt;                 var isExist = db.TB_Admin.FirstOrDefault(p =&amp;gt; p.ID == Convert.ToInt32(context.Request[&lt;span style="color: #006080;"&gt;"id"&lt;/span&gt;]));&lt;!--CRLF--&gt;&lt;span id="lnum42" style="color: #606060;"&gt;  42:&lt;/span&gt;                 isExist.Defatulflag = context.Request[&lt;span style="color: #006080;"&gt;"Defatulflag"&lt;/span&gt;] == &lt;span style="color: #006080;"&gt;"1"&lt;/span&gt; ? 1 : 0;&lt;!--CRLF--&gt;&lt;span id="lnum43" style="color: #606060;"&gt;  43:&lt;/span&gt;                 isExist.AdminLogin = context.Request[&lt;span style="color: #006080;"&gt;"AdminLogin"&lt;/span&gt;].Trim();&lt;!--CRLF--&gt;&lt;span id="lnum44" style="color: #606060;"&gt;  44:&lt;/span&gt;                 isExist.RoleID = Convert.ToInt32(context.Request[&lt;span style="color: #006080;"&gt;"RoleID"&lt;/span&gt;]);&lt;!--CRLF--&gt;&lt;span id="lnum45" style="color: #606060;"&gt;  45:&lt;/span&gt;                 &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (context.Request[&lt;span style="color: #006080;"&gt;"AdminPassword"&lt;/span&gt;].Trim() != &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;.Empty)&lt;!--CRLF--&gt;&lt;span id="lnum46" style="color: #606060;"&gt;  46:&lt;/span&gt;                     isExist.Password = Utility.UserINFOManager.PasswordEncry(context.Request[&lt;span style="color: #006080;"&gt;"AdminPassword"&lt;/span&gt;].Trim());&lt;!--CRLF--&gt;&lt;span id="lnum47" style="color: #606060;"&gt;  47:&lt;/span&gt;                 db.SubmitChanges();&lt;!--CRLF--&gt;&lt;span id="lnum48" style="color: #606060;"&gt;  48:&lt;/span&gt;             }&lt;!--CRLF--&gt;&lt;span id="lnum49" style="color: #606060;"&gt;  49:&lt;/span&gt;             context.Response.Write(&lt;span style="color: #006080;"&gt;"1"&lt;/span&gt;);&lt;!--CRLF--&gt;&lt;span id="lnum50" style="color: #606060;"&gt;  50:&lt;/span&gt;             &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;!--CRLF--&gt;&lt;span id="lnum51" style="color: #606060;"&gt;  51:&lt;/span&gt;         }&lt;!--CRLF--&gt;&lt;span id="lnum52" style="color: #606060;"&gt;  52:&lt;/span&gt;     }&lt;!--CRLF--&gt;&lt;span id="lnum53" style="color: #606060;"&gt;  53:&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;!--CRLF--&gt;&lt;span id="lnum54" style="color: #606060;"&gt;  54:&lt;/span&gt;     &lt;span style="color: #cc6633;"&gt;#endregion&lt;/span&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;从上面代码可以看出：&lt;/p&gt;&lt;ol&gt;&lt;ol&gt;&lt;li&gt;通过Type参数，可以获取请求的页面。&lt;/li&gt;&lt;li&gt;通过autoLoad参数，可以判断是否是加载赋值。注意FirstOrDefault函数，是获取第一条数据，然后通过ToJson方法（自己定义的扩展方法）转换为JSON数据。&lt;/li&gt;&lt;li&gt;通过id参数，可以判断是否为编辑。&lt;/li&gt;&lt;li&gt;以上使用的是LINQ to SQL，个人认为使用LINQ to SQl开发小项目还是挺快的。关于LINQ to SQL的具体使用，就不说了。顺便送大家一段服务器分页通用代码（仅支持LINQ2SQL），如果觉得性能不行，请自己用存储过程实现，这里不考虑性能：&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;&lt;div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; &lt;span style="color: #008000;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt; &lt;span style="color: #008000;"&gt;/// 当前页&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt; &lt;span style="color: #008000;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; pageIndex = Convert.ToInt32(HttpContext.Current.Request[&lt;span style="color: #006080;"&gt;"page"&lt;/span&gt;] ?? &lt;span style="color: #006080;"&gt;"1"&lt;/span&gt;);&lt;!--CRLF--&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt; &lt;span style="color: #008000;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum6" style="color: #606060;"&gt;   6:&lt;/span&gt; &lt;span style="color: #008000;"&gt;/// 每页显示记录数&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum7" style="color: #606060;"&gt;   7:&lt;/span&gt; &lt;span style="color: #008000;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum8" style="color: #606060;"&gt;   8:&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; pageSize = Convert.ToInt32(HttpContext.Current.Request[&lt;span style="color: #006080;"&gt;"rows"&lt;/span&gt;] ?? &lt;span style="color: #006080;"&gt;"1"&lt;/span&gt;);&lt;!--CRLF--&gt;&lt;span id="lnum9" style="color: #606060;"&gt;   9:&lt;/span&gt; &lt;span style="color: #008000;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum10" style="color: #606060;"&gt;  10:&lt;/span&gt; &lt;span style="color: #008000;"&gt;/// 获取分页JSON&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum11" style="color: #606060;"&gt;  11:&lt;/span&gt; &lt;span style="color: #008000;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum12" style="color: #606060;"&gt;  12:&lt;/span&gt; &lt;span style="color: #008000;"&gt;/// &amp;lt;typeparam name="T"&amp;gt;&amp;lt;/typeparam&amp;gt;&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum13" style="color: #606060;"&gt;  13:&lt;/span&gt; &lt;span style="color: #008000;"&gt;/// &amp;lt;param name="data"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum14" style="color: #606060;"&gt;  14:&lt;/span&gt; &lt;span style="color: #008000;"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum15" style="color: #606060;"&gt;  15:&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; GetPageingJson&amp;lt;T&amp;gt;(IQueryable&amp;lt;T&amp;gt; data)&lt;!--CRLF--&gt;&lt;span id="lnum16" style="color: #606060;"&gt;  16:&lt;/span&gt; {&lt;!--CRLF--&gt;&lt;span id="lnum17" style="color: #606060;"&gt;  17:&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #006080;"&gt;"{{\"total\":\"{0}\",\"rows\":{1}}}"&lt;/span&gt;, data.Count(), data.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToJson());&lt;!--CRLF--&gt;&lt;span id="lnum18" style="color: #606060;"&gt;  18:&lt;/span&gt; }&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;相比使用各种.NET Ajax框架，我还是喜欢按上面这种模式，虽然很多Ajax框架可以实现js调用C#方法，可以调用WebService，可以操作服务器控件，但是我仍然痴迷上面的模式，因为个人觉得这样精简、易控制、一目了然、没有ViewState、没有服务器控件、甚至没有Cookie和Session（需要实现接口）。。。。&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;前端HTML&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;刚才贴的后台处理逻辑是用户管理的编辑界面，那么前端HTML呢？如下：&lt;/p&gt;&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;&lt;div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; &amp;lt;%@ Page Title=&lt;span style="color: #006080;"&gt;""&lt;/span&gt; Language=&lt;span style="color: #006080;"&gt;"C#"&lt;/span&gt; MasterPageFile=&lt;span style="color: #006080;"&gt;"~/Form.Master"&lt;/span&gt; AutoEventWireup=&lt;span style="color: #006080;"&gt;"true"&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt;     CodeBehind=&lt;span style="color: #006080;"&gt;"AdminUser_Add.aspx.cs"&lt;/span&gt; Inherits=&lt;span style="color: #006080;"&gt;"Singer.WebPages.RoleManagement.AdminUser_Add"&lt;/span&gt; %&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt;&amp;nbsp; &lt;!--CRLF--&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt; &amp;lt;asp:Content ID=&lt;span style="color: #006080;"&gt;"Content1"&lt;/span&gt; ContentPlaceHolderID=&lt;span style="color: #006080;"&gt;"head"&lt;/span&gt; runat=&lt;span style="color: #006080;"&gt;"server"&lt;/span&gt;&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt; &amp;lt;/asp:Content&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum6" style="color: #606060;"&gt;   6:&lt;/span&gt; &amp;lt;asp:Content ID=&lt;span style="color: #006080;"&gt;"Content2"&lt;/span&gt; ContentPlaceHolderID=&lt;span style="color: #006080;"&gt;"ContentPlaceHolder1"&lt;/span&gt; runat=&lt;span style="color: #006080;"&gt;"server"&lt;/span&gt;&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum7" style="color: #606060;"&gt;   7:&lt;/span&gt;     &amp;lt;div &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;=&lt;span style="color: #006080;"&gt;"easyui-layout"&lt;/span&gt; style=&lt;span style="color: #006080;"&gt;"text-align: left; height: 270px;"&lt;/span&gt; fit=&lt;span style="color: #006080;"&gt;"true"&lt;/span&gt;&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum8" style="color: #606060;"&gt;   8:&lt;/span&gt;         &amp;lt;div region=&lt;span style="color: #006080;"&gt;"center"&lt;/span&gt; border=&lt;span style="color: #006080;"&gt;"false"&lt;/span&gt; style=&lt;span style="color: #006080;"&gt;"padding: 10px; background: #fff; border: 1px solid #ccc;"&lt;/span&gt;&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum9" style="color: #606060;"&gt;   9:&lt;/span&gt;             &amp;lt;form id=&lt;span style="color: #006080;"&gt;"ff"&lt;/span&gt; method=&lt;span style="color: #006080;"&gt;"post"&lt;/span&gt;&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum10" style="color: #606060;"&gt;  10:&lt;/span&gt;             &amp;lt;input type=&lt;span style="color: #006080;"&gt;"hidden"&lt;/span&gt; name=&lt;span style="color: #006080;"&gt;"id"&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;value&lt;/span&gt;=&lt;span style="color: #006080;"&gt;"&amp;lt;%=Request.QueryString["&lt;/span&gt;ID&lt;span style="color: #006080;"&gt;"] %&amp;gt;"&lt;/span&gt; /&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum11" style="color: #606060;"&gt;  11:&lt;/span&gt;             &amp;lt;table border=&lt;span style="color: #006080;"&gt;"0"&lt;/span&gt; cellpadding=&lt;span style="color: #006080;"&gt;"0"&lt;/span&gt; cellspacing=&lt;span style="color: #006080;"&gt;"0"&lt;/span&gt;&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum12" style="color: #606060;"&gt;  12:&lt;/span&gt;                 &amp;lt;tr&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum13" style="color: #606060;"&gt;  13:&lt;/span&gt;                     &amp;lt;td&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum14" style="color: #606060;"&gt;  14:&lt;/span&gt;                         &amp;lt;label &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt;=&lt;span style="color: #006080;"&gt;"AdminLogin"&lt;/span&gt;&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum15" style="color: #606060;"&gt;  15:&lt;/span&gt;                             登录名：&amp;lt;/label&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum16" style="color: #606060;"&gt;  16:&lt;/span&gt;                     &amp;lt;/td&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum17" style="color: #606060;"&gt;  17:&lt;/span&gt;                     &amp;lt;td&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum18" style="color: #606060;"&gt;  18:&lt;/span&gt;                         &amp;lt;input &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;=&lt;span style="color: #006080;"&gt;"easyui-validatebox"&lt;/span&gt; style=&lt;span style="color: #006080;"&gt;"width: 300px;"&lt;/span&gt; type=&lt;span style="color: #006080;"&gt;"text"&lt;/span&gt; required=&lt;span style="color: #006080;"&gt;"true"&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum19" style="color: #606060;"&gt;  19:&lt;/span&gt;                             validtype=&lt;span style="color: #006080;"&gt;"length[0,20]"&lt;/span&gt; name=&lt;span style="color: #006080;"&gt;"AdminLogin"&lt;/span&gt;&amp;gt;&amp;lt;/input&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum20" style="color: #606060;"&gt;  20:&lt;/span&gt;                     &amp;lt;/td&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum21" style="color: #606060;"&gt;  21:&lt;/span&gt;                 &amp;lt;/tr&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum22" style="color: #606060;"&gt;  22:&lt;/span&gt;                 &amp;lt;tr&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum23" style="color: #606060;"&gt;  23:&lt;/span&gt;                     &amp;lt;td&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum24" style="color: #606060;"&gt;  24:&lt;/span&gt;                         &amp;lt;label &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt;=&lt;span style="color: #006080;"&gt;"RoleID"&lt;/span&gt;&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum25" style="color: #606060;"&gt;  25:&lt;/span&gt;                             所属角色：&amp;lt;/label&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum26" style="color: #606060;"&gt;  26:&lt;/span&gt;                     &amp;lt;/td&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum27" style="color: #606060;"&gt;  27:&lt;/span&gt;                     &amp;lt;td&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum28" style="color: #606060;"&gt;  28:&lt;/span&gt;                         &amp;lt;input &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;=&lt;span style="color: #006080;"&gt;"easyui-combobox"&lt;/span&gt; valuefield=&lt;span style="color: #006080;"&gt;"ID"&lt;/span&gt; textfield=&lt;span style="color: #006080;"&gt;"RoleName"&lt;/span&gt; panelheight=&lt;span style="color: #006080;"&gt;"auto"&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum29" style="color: #606060;"&gt;  29:&lt;/span&gt;                             editable=&lt;span style="color: #006080;"&gt;"false"&lt;/span&gt; style=&lt;span style="color: #006080;"&gt;"width: 300px;"&lt;/span&gt; url=&lt;span style="color: #006080;"&gt;"/Ajax/Common.ashx?Type=GetRoles"&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum30" style="color: #606060;"&gt;  30:&lt;/span&gt;                             required=&lt;span style="color: #006080;"&gt;"true"&lt;/span&gt; name=&lt;span style="color: #006080;"&gt;"RoleID"&lt;/span&gt;&amp;gt;&amp;lt;/input&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum31" style="color: #606060;"&gt;  31:&lt;/span&gt;                     &amp;lt;/td&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum32" style="color: #606060;"&gt;  32:&lt;/span&gt;                 &amp;lt;/tr&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum33" style="color: #606060;"&gt;  33:&lt;/span&gt;                 &amp;lt;tr&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum34" style="color: #606060;"&gt;  34:&lt;/span&gt;                     &amp;lt;td colspan=&lt;span style="color: #006080;"&gt;"2"&lt;/span&gt; style=&lt;span style="color: #006080;"&gt;'color: Red'&lt;/span&gt;&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum35" style="color: #606060;"&gt;  35:&lt;/span&gt;                         在编辑时，输入管理员密码表示重新设置密码。&lt;!--CRLF--&gt;&lt;span id="lnum36" style="color: #606060;"&gt;  36:&lt;/span&gt;                     &amp;lt;/td&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum37" style="color: #606060;"&gt;  37:&lt;/span&gt;                 &amp;lt;/tr&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum38" style="color: #606060;"&gt;  38:&lt;/span&gt;                 &amp;lt;tr&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum39" style="color: #606060;"&gt;  39:&lt;/span&gt;                     &amp;lt;td&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum40" style="color: #606060;"&gt;  40:&lt;/span&gt;                         &amp;lt;label &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt;=&lt;span style="color: #006080;"&gt;"AdminPassword"&lt;/span&gt;&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum41" style="color: #606060;"&gt;  41:&lt;/span&gt;                             密码：&amp;lt;/label&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum42" style="color: #606060;"&gt;  42:&lt;/span&gt;                     &amp;lt;/td&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum43" style="color: #606060;"&gt;  43:&lt;/span&gt;                     &amp;lt;td&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum44" style="color: #606060;"&gt;  44:&lt;/span&gt;                         &amp;lt;input &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;=&lt;span style="color: #006080;"&gt;"easyui-validatebox"&lt;/span&gt; style=&lt;span style="color: #006080;"&gt;"width: 300px;"&lt;/span&gt; type=&lt;span style="color: #006080;"&gt;"text"&lt;/span&gt; validtype=&lt;span style="color: #006080;"&gt;"length[6,20]"&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum45" style="color: #606060;"&gt;  45:&lt;/span&gt;                             id=&lt;span style="color: #006080;"&gt;'txtPassword'&lt;/span&gt; name=&lt;span style="color: #006080;"&gt;"AdminPassword"&lt;/span&gt;&amp;gt;&amp;lt;/input&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum46" style="color: #606060;"&gt;  46:&lt;/span&gt;                     &amp;lt;/td&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum47" style="color: #606060;"&gt;  47:&lt;/span&gt;                 &amp;lt;/tr&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum48" style="color: #606060;"&gt;  48:&lt;/span&gt;                 &amp;lt;tr&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum49" style="color: #606060;"&gt;  49:&lt;/span&gt;                     &amp;lt;td&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum50" style="color: #606060;"&gt;  50:&lt;/span&gt;                         &amp;lt;label &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt;=&lt;span style="color: #006080;"&gt;"AdminPassword2"&lt;/span&gt;&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum51" style="color: #606060;"&gt;  51:&lt;/span&gt;                             确认密码：&amp;lt;/label&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum52" style="color: #606060;"&gt;  52:&lt;/span&gt;                     &amp;lt;/td&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum53" style="color: #606060;"&gt;  53:&lt;/span&gt;                     &amp;lt;td&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum54" style="color: #606060;"&gt;  54:&lt;/span&gt;                         &amp;lt;input &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;=&lt;span style="color: #006080;"&gt;"easyui-validatebox"&lt;/span&gt; style=&lt;span style="color: #006080;"&gt;"width: 300px;"&lt;/span&gt; type=&lt;span style="color: #006080;"&gt;"text"&lt;/span&gt; validtype=&lt;span style="color: #006080;"&gt;"length[6,20]"&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum55" style="color: #606060;"&gt;  55:&lt;/span&gt;                             id=&lt;span style="color: #006080;"&gt;'txtPassword2'&lt;/span&gt; name=&lt;span style="color: #006080;"&gt;"AdminPassword2"&lt;/span&gt;&amp;gt;&amp;lt;/input&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum56" style="color: #606060;"&gt;  56:&lt;/span&gt;                     &amp;lt;/td&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum57" style="color: #606060;"&gt;  57:&lt;/span&gt;                 &amp;lt;/tr&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum58" style="color: #606060;"&gt;  58:&lt;/span&gt;                 &amp;lt;tr&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum59" style="color: #606060;"&gt;  59:&lt;/span&gt;                     &amp;lt;td&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum60" style="color: #606060;"&gt;  60:&lt;/span&gt;                         &amp;lt;label &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt;=&lt;span style="color: #006080;"&gt;"Defatulflag"&lt;/span&gt;&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum61" style="color: #606060;"&gt;  61:&lt;/span&gt;                             是否上架：&amp;lt;/label&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum62" style="color: #606060;"&gt;  62:&lt;/span&gt;                     &amp;lt;/td&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum63" style="color: #606060;"&gt;  63:&lt;/span&gt;                     &amp;lt;td&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum64" style="color: #606060;"&gt;  64:&lt;/span&gt;                         &amp;lt;input type=&lt;span style="color: #006080;"&gt;"checkbox"&lt;/span&gt; name=&lt;span style="color: #006080;"&gt;"Defatulflag"&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;=&lt;span style="color: #006080;"&gt;"easyui-validatebox"&lt;/span&gt; type=&lt;span style="color: #006080;"&gt;"text"&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum65" style="color: #606060;"&gt;  65:&lt;/span&gt;                             required=&lt;span style="color: #006080;"&gt;"true"&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;value&lt;/span&gt;=&lt;span style="color: #006080;"&gt;"1"&lt;/span&gt; /&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum66" style="color: #606060;"&gt;  66:&lt;/span&gt;                     &amp;lt;/td&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum67" style="color: #606060;"&gt;  67:&lt;/span&gt;                 &amp;lt;/tr&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum68" style="color: #606060;"&gt;  68:&lt;/span&gt;             &amp;lt;/table&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum69" style="color: #606060;"&gt;  69:&lt;/span&gt;             &amp;lt;/form&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum70" style="color: #606060;"&gt;  70:&lt;/span&gt;         &amp;lt;/div&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum71" style="color: #606060;"&gt;  71:&lt;/span&gt;         &amp;lt;div region=&lt;span style="color: #006080;"&gt;"south"&lt;/span&gt; border=&lt;span style="color: #006080;"&gt;"false"&lt;/span&gt; style=&lt;span style="color: #006080;"&gt;"text-align: right; padding: 5px 5px 5px 0;"&lt;/span&gt;&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum72" style="color: #606060;"&gt;  72:&lt;/span&gt;             &amp;lt;a &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;=&lt;span style="color: #006080;"&gt;"easyui-linkbutton"&lt;/span&gt; iconcls=&lt;span style="color: #006080;"&gt;"icon-save"&lt;/span&gt; href=&lt;span style="color: #006080;"&gt;"javascript:void(0)"&lt;/span&gt; onclick=&lt;span style="color: #006080;"&gt;"javascript:submitForm();"&lt;/span&gt;&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum73" style="color: #606060;"&gt;  73:&lt;/span&gt;                 提交&amp;lt;/a&amp;gt; &amp;lt;%--&amp;lt;a &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;=&lt;span style="color: #006080;"&gt;"easyui-linkbutton"&lt;/span&gt; iconcls=&lt;span style="color: #006080;"&gt;"icon-no"&lt;/span&gt; href=&lt;span style="color: #006080;"&gt;"javascript:void(0)"&lt;/span&gt; onclick=&lt;span style="color: #006080;"&gt;"$('#ff').form('clear');"&lt;/span&gt;&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum74" style="color: #606060;"&gt;  74:&lt;/span&gt;                     重置&amp;lt;/a&amp;gt;--%&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum75" style="color: #606060;"&gt;  75:&lt;/span&gt;         &amp;lt;/div&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum76" style="color: #606060;"&gt;  76:&lt;/span&gt;     &amp;lt;/div&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum77" style="color: #606060;"&gt;  77:&lt;/span&gt;     &amp;lt;script type=&lt;span style="color: #006080;"&gt;"text/javascript"&lt;/span&gt;&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum78" style="color: #606060;"&gt;  78:&lt;/span&gt;         $(function () {&lt;!--CRLF--&gt;&lt;span id="lnum79" style="color: #606060;"&gt;  79:&lt;/span&gt;             &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (autoLoad == 1) {&lt;!--CRLF--&gt;&lt;span id="lnum80" style="color: #606060;"&gt;  80:&lt;/span&gt;                 $(&lt;span style="color: #006080;"&gt;'#txtPassword'&lt;/span&gt;).keypress(function () {&lt;!--CRLF--&gt;&lt;span id="lnum81" style="color: #606060;"&gt;  81:&lt;/span&gt;                     &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; ($(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;).val().length &amp;gt; 0) {&lt;!--CRLF--&gt;&lt;span id="lnum82" style="color: #606060;"&gt;  82:&lt;/span&gt;                         $(&lt;span style="color: #006080;"&gt;'#txtPassword2'&lt;/span&gt;).validatebox({&lt;!--CRLF--&gt;&lt;span id="lnum83" style="color: #606060;"&gt;  83:&lt;/span&gt;                             required: &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum84" style="color: #606060;"&gt;  84:&lt;/span&gt;                         });&lt;!--CRLF--&gt;&lt;span id="lnum85" style="color: #606060;"&gt;  85:&lt;/span&gt;                     }&lt;!--CRLF--&gt;&lt;span id="lnum86" style="color: #606060;"&gt;  86:&lt;/span&gt;                 }).change(function () {&lt;!--CRLF--&gt;&lt;span id="lnum87" style="color: #606060;"&gt;  87:&lt;/span&gt;                     &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; ($(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;).val().length &amp;gt; 0) {&lt;!--CRLF--&gt;&lt;span id="lnum88" style="color: #606060;"&gt;  88:&lt;/span&gt;                         $(&lt;span style="color: #006080;"&gt;'#txtPassword2'&lt;/span&gt;).validatebox({&lt;!--CRLF--&gt;&lt;span id="lnum89" style="color: #606060;"&gt;  89:&lt;/span&gt;                             required: &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum90" style="color: #606060;"&gt;  90:&lt;/span&gt;                         });&lt;!--CRLF--&gt;&lt;span id="lnum91" style="color: #606060;"&gt;  91:&lt;/span&gt;                     } &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt; {&lt;!--CRLF--&gt;&lt;span id="lnum92" style="color: #606060;"&gt;  92:&lt;/span&gt;                         $(&lt;span style="color: #006080;"&gt;'#txtPassword2'&lt;/span&gt;).validatebox({&lt;!--CRLF--&gt;&lt;span id="lnum93" style="color: #606060;"&gt;  93:&lt;/span&gt;                             required: &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum94" style="color: #606060;"&gt;  94:&lt;/span&gt;                         });&lt;!--CRLF--&gt;&lt;span id="lnum95" style="color: #606060;"&gt;  95:&lt;/span&gt;                     }&lt;!--CRLF--&gt;&lt;span id="lnum96" style="color: #606060;"&gt;  96:&lt;/span&gt;                 });&lt;!--CRLF--&gt;&lt;span id="lnum97" style="color: #606060;"&gt;  97:&lt;/span&gt;&amp;nbsp; &lt;!--CRLF--&gt;&lt;span id="lnum98" style="color: #606060;"&gt;  98:&lt;/span&gt;             } &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt; {&lt;!--CRLF--&gt;&lt;span id="lnum99" style="color: #606060;"&gt;  99:&lt;/span&gt;                 $(&lt;span style="color: #006080;"&gt;'#txtPassword,#txtPassword2'&lt;/span&gt;).validatebox({&lt;!--CRLF--&gt;&lt;span id="lnum100" style="color: #606060;"&gt; 100:&lt;/span&gt;                     required: &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;!--CRLF--&gt;&lt;span id="lnum101" style="color: #606060;"&gt; 101:&lt;/span&gt;                 }); ;&lt;!--CRLF--&gt;&lt;span id="lnum102" style="color: #606060;"&gt; 102:&lt;/span&gt;             }&lt;!--CRLF--&gt;&lt;span id="lnum103" style="color: #606060;"&gt; 103:&lt;/span&gt;         });&lt;!--CRLF--&gt;&lt;span id="lnum104" style="color: #606060;"&gt; 104:&lt;/span&gt;     &amp;lt;/script&amp;gt;&lt;!--CRLF--&gt;&lt;span id="lnum105" style="color: #606060;"&gt; 105:&lt;/span&gt; &amp;lt;/asp:Content&amp;gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;值得注意的是：&lt;/p&gt;&lt;ol&gt;&lt;li&gt;这里使用的控件均为HTML控件。&lt;/li&gt;&lt;li&gt;请注意name属性，该属性决定提交的post参数名，同时也是form加载赋值的参数名，也就是这里的值要与后台输出的JSON要对应。&lt;/li&gt;&lt;li&gt;返回的JSON数据如下：&lt;/li&gt;&lt;li&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201204/201204092331362571.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201204/201204092331367870.png" alt="image" width="687" height="200" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;这一篇就写到这里吧。由于最近忙，又耽误了。。。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/codelove/aggbug/2439784.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/codelove/archive/2012/04/09/2439784.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/codelove/archive/2012/03/25/2417235.html</id><title type="text">JQuery EasyUi之界面设计——通用的JavaScript（二）</title><summary type="text">所谓磨刀不误砍柴工，先写点通用的代码，后面开发起来效率就高多了。多余的话就不敲了，先简单介绍介绍吧。时间格式化对于序列化JSON，我喜欢用JSON.NET，为了方便，我定义了一个扩展方法，如下面代码： 1: /// &lt;summary&gt; 2: /// 将对象序列化为JSON数据 3: /// &lt;/summary&gt; 4: /// &lt;param name="instance"&gt;&lt;/param&gt; 5: /// &lt;returns&gt;&lt;/returns&gt; 6: public s...</summary><published>2012-03-25T15:30:00Z</published><updated>2012-03-25T15:30:00Z</updated><author><name>雪雁</name><uri>http://www.cnblogs.com/codelove/</uri></author><link rel="alternate" href="http://www.cnblogs.com/codelove/archive/2012/03/25/2417235.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/codelove/archive/2012/03/25/2417235.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;所谓磨刀不误砍柴工，先写点通用的代码，后面开发起来效率就高多了。多余的话就不敲了，先简单介绍介绍吧。&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;strong&gt;时间格式化&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;对于序列化JSON，我喜欢用JSON.NET，为了方便，我定义了一个扩展方法，如下面代码：&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        &lt;span class="rem"&gt;/// 将对象序列化为JSON数据&lt;/span&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="instance"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ToJson(&lt;span class="kwrd"&gt;this&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; instance)&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        {&lt;span class="lnum"&gt;   8:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; JsonConvert.SerializeObject(instance);&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        }&lt;p&gt;那么序列化JOSN输出那么就方便多了，如下面代码：&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;                                    var info = from a &lt;span class="kwrd"&gt;in&lt;/span&gt; db.TB_KTVAndConcert&lt;span class="lnum"&gt;   2:  &lt;/span&gt;                                               join b &lt;span class="kwrd"&gt;in&lt;/span&gt; db.TB_City on a.Cityid equals b.ID&lt;span class="lnum"&gt;   3:  &lt;/span&gt;                                               &lt;span class="kwrd"&gt;where&lt;/span&gt; a.AttributeCode == &lt;span class="str"&gt;"AttrubuteCode"&lt;/span&gt;.GetRequest()&lt;span class="lnum"&gt;   4:  &lt;/span&gt;                                               orderby a.Cityid&lt;span class="lnum"&gt;   5:  &lt;/span&gt;                                               select &lt;span class="kwrd"&gt;new&lt;/span&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;                                               {&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                                                   a.CreateDate,&lt;span class="lnum"&gt;   8:  &lt;/span&gt;                                                   a.Defaultflag,&lt;span class="lnum"&gt;   9:  &lt;/span&gt;                                                   a.ID,&lt;span class="lnum"&gt;  10:  &lt;/span&gt;                                                   a.Name,&lt;span class="lnum"&gt;  11:  &lt;/span&gt;                                                   a.Cityid,&lt;span class="lnum"&gt;  12:  &lt;/span&gt;                                                   b.CityName,&lt;span class="lnum"&gt;  13:  &lt;/span&gt;                                                   a.Displayindex&lt;span class="lnum"&gt;  14:  &lt;/span&gt;                                               };&lt;span class="lnum"&gt;  15:  &lt;/span&gt;                                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="str"&gt;"CityID"&lt;/span&gt;.GetRequest().IsNotEmpty())&lt;span class="lnum"&gt;  16:  &lt;/span&gt;                                    {&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                                        &lt;span class="kwrd"&gt;if&lt;/span&gt; (MyRegex.IsNumberRegex(&lt;span class="str"&gt;"CityID"&lt;/span&gt;.GetRequest()))&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                                        {&lt;span class="lnum"&gt;  19:  &lt;/span&gt;                                            &lt;span class="kwrd"&gt;int&lt;/span&gt; cityId = Convert.ToInt32(&lt;span class="str"&gt;"CityID"&lt;/span&gt;.GetRequest());&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                                            info = info.Where(p =&amp;gt; p.Cityid == cityId);&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                                        }&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                                    }&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                                    context.Response.Write(info.OrderByDescending(p =&amp;gt; p.Defaultflag).ThenBy(p =&amp;gt; p.Displayindex).ToJson());&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;style&gt;&lt;!--.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }--&gt;&lt;/style&gt;&lt;p&gt;序列化JSON是可以了，但是前台显示DateTime类型数据时显示就有问题了，也就是获取不到想要的格式化字符串。解决这个问题有两种方式，方式一就是定义一个C#方法来返回格式化时间字符串，关键部分代码如下：&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;                                               select &lt;span class="kwrd"&gt;new&lt;/span&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;                                               {&lt;span class="lnum"&gt;   3:  &lt;/span&gt;                                                   CreateDate = a.CreateDate.GetDateTimeString(),&lt;span class="lnum"&gt;   4:  &lt;/span&gt;                                                   a.Defaultflag,&lt;span class="lnum"&gt;   5:  &lt;/span&gt;                                                   a.ID,&lt;span class="lnum"&gt;   6:  &lt;/span&gt;                                                   a.Name,&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                                                   a.Cityid,&lt;span class="lnum"&gt;   8:  &lt;/span&gt;                                                   b.CityName,&lt;span class="lnum"&gt;   9:  &lt;/span&gt;                                                   a.Displayindex&lt;span class="lnum"&gt;  10:  &lt;/span&gt;                                               };&lt;/div&gt;&lt;style&gt;&lt;!--.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }--&gt;&lt;/style&gt;&lt;p&gt;这样虽然可以，但是如果我想统一在浏览器端处理呢？于是封装下面的函数：&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="rem"&gt;//时间格式化&lt;/span&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;Date.prototype.format = &lt;span class="kwrd"&gt;function&lt;/span&gt; (format) {&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (!format) {&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        format = &lt;span class="str"&gt;"yyyy-MM-dd hh:mm:ss"&lt;/span&gt;;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    }&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;var&lt;/span&gt; o = {&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="str"&gt;"M+"&lt;/span&gt;: &lt;span class="kwrd"&gt;this&lt;/span&gt;.getMonth() + 1, &lt;span class="rem"&gt;// month&lt;/span&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &lt;span class="str"&gt;"d+"&lt;/span&gt;: &lt;span class="kwrd"&gt;this&lt;/span&gt;.getDate(), &lt;span class="rem"&gt;// day&lt;/span&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="str"&gt;"h+"&lt;/span&gt;: &lt;span class="kwrd"&gt;this&lt;/span&gt;.getHours(), &lt;span class="rem"&gt;// hour&lt;/span&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="str"&gt;"m+"&lt;/span&gt;: &lt;span class="kwrd"&gt;this&lt;/span&gt;.getMinutes(), &lt;span class="rem"&gt;// minute&lt;/span&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        &lt;span class="str"&gt;"s+"&lt;/span&gt;: &lt;span class="kwrd"&gt;this&lt;/span&gt;.getSeconds(), &lt;span class="rem"&gt;// second&lt;/span&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        &lt;span class="str"&gt;"q+"&lt;/span&gt;: Math.floor((&lt;span class="kwrd"&gt;this&lt;/span&gt;.getMonth() + 3) / 3), &lt;span class="rem"&gt;// quarter&lt;/span&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        &lt;span class="str"&gt;"S"&lt;/span&gt;: &lt;span class="kwrd"&gt;this&lt;/span&gt;.getMilliseconds()&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="rem"&gt;// millisecond&lt;/span&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    };&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (/(y+)/.test(format)) {&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        format = format.replace(RegExp.$1, (&lt;span class="kwrd"&gt;this&lt;/span&gt;.getFullYear() + &lt;span class="str"&gt;""&lt;/span&gt;).substr(4 - RegExp.$1.length));&lt;span class="lnum"&gt;  18:  &lt;/span&gt;    }&lt;span class="lnum"&gt;  19:  &lt;/span&gt;    &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;var&lt;/span&gt; k &lt;span class="kwrd"&gt;in&lt;/span&gt; o) {&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;new&lt;/span&gt; RegExp(&lt;span class="str"&gt;"("&lt;/span&gt; + k + &lt;span class="str"&gt;")"&lt;/span&gt;).test(format)) {&lt;span class="lnum"&gt;  21:  &lt;/span&gt;            format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : (&lt;span class="str"&gt;"00"&lt;/span&gt; + o[k]).substr((&lt;span class="str"&gt;""&lt;/span&gt; + o[k]).length));&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        }&lt;span class="lnum"&gt;  23:  &lt;/span&gt;    }&lt;span class="lnum"&gt;  24:  &lt;/span&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; format;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;};&lt;span class="lnum"&gt;  26:  &lt;/span&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; fomatDate(str) {&lt;span class="lnum"&gt;  27:  &lt;/span&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; (&lt;span class="kwrd"&gt;new&lt;/span&gt; Date(parseInt(str.substring(str.indexOf(&lt;span class="str"&gt;'('&lt;/span&gt;) + 1, str.indexOf(&lt;span class="str"&gt;')'&lt;/span&gt;))))).format(&lt;span class="str"&gt;"yyyy-MM-dd hh:mm:ss"&lt;/span&gt;);&lt;span class="lnum"&gt;  28:  &lt;/span&gt;}&lt;/div&gt;&lt;style&gt;&lt;!--.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }--&gt;&lt;/style&gt;&lt;p&gt;&lt;span class="lnum"&gt;&amp;nbsp; &lt;/span&gt;前台调用：&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="kwrd"&gt;function&lt;/span&gt; formatCreateDate(value, row, index) {&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; fomatDate(row.CreateDate);&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        }&lt;/div&gt;&lt;style&gt;&lt;!--.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }--&gt;&lt;/style&gt;&lt;p&gt;&lt;span style="color: #000000; font-family: Consolas; font-size: x-small;"&gt;显示效果：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201203/201203252330067904.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201203/201203252330066476.png" alt="image" width="671" height="101" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;hr /&gt;&lt;style&gt;&lt;!--.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }--&gt;&lt;/style&gt;&lt;style&gt;&lt;!--.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }--&gt;&lt;/style&gt;&lt;p&gt;&lt;strong&gt;消息框&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;弹出框以及系统消息框&lt;/strong&gt;&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; showMsg(title, msg, isAlert) {&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (isAlert !== undefined &amp;amp;&amp;amp; isAlert) {&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        $.messager.alert(title, msg);&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    } &lt;span class="kwrd"&gt;else&lt;/span&gt; {&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        $.messager.show({&lt;span class="lnum"&gt;   6:  &lt;/span&gt;            title: title,&lt;span class="lnum"&gt;   7:  &lt;/span&gt;            msg: msg,&lt;span class="lnum"&gt;   8:  &lt;/span&gt;            showType: &lt;span class="str"&gt;'show'&lt;/span&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        });&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    }&lt;span class="lnum"&gt;  11:  &lt;/span&gt;}&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;确认框&lt;/strong&gt;&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; showConfirm(title, msg, callback) {&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    $.messager.confirm(title, msg, &lt;span class="kwrd"&gt;function&lt;/span&gt; (r) {&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (r) {&lt;span class="lnum"&gt;   4:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (jQuery.isFunction(callback))&lt;span class="lnum"&gt;   5:  &lt;/span&gt;                callback.call();&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        }&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    });&lt;span class="lnum"&gt;   8:  &lt;/span&gt;}&lt;p&gt;&lt;strong&gt;进度框&lt;/strong&gt;&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; showProcess(isShow, title, msg) {&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (!isShow) {&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        $.messager.progress(&lt;span class="str"&gt;'close'&lt;/span&gt;);&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt;;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    }&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;var&lt;/span&gt; win = $.messager.progress({&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        title: title,&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        msg: msg&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    });&lt;span class="lnum"&gt;  10:  &lt;/span&gt;}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;style&gt;&lt;!--.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }--&gt;&lt;/style&gt;&lt;div class="csharpcode"&gt;&lt;div class="csharpcode"&gt;&lt;p&gt;例如在表单提交时，为了防止重复提交，会显示一个进度框。提交完成时，关闭进度框并提示操作信息：&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; submitForm(url) {&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    $(&lt;span class="str"&gt;'#ff'&lt;/span&gt;).form(&lt;span class="str"&gt;'submit'&lt;/span&gt;, {&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        url: (url === undefined ? &lt;span class="str"&gt;"/Ajax/Common.ashx"&lt;/span&gt; : url) + &lt;span class="str"&gt;"?Type="&lt;/span&gt; + typeCode,&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        onSubmit: &lt;span class="kwrd"&gt;function&lt;/span&gt; () {&lt;span class="lnum"&gt;   5:  &lt;/span&gt;            &lt;span class="kwrd"&gt;var&lt;/span&gt; flag = $(&lt;span class="kwrd"&gt;this&lt;/span&gt;).form(&lt;span class="str"&gt;'validate'&lt;/span&gt;);&lt;span class="lnum"&gt;   6:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (flag) {&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                showProcess(&lt;span class="kwrd"&gt;true&lt;/span&gt;, &lt;span class="str"&gt;'温馨提示'&lt;/span&gt;, &lt;span class="str"&gt;'正在提交数据...'&lt;/span&gt;);&lt;span class="lnum"&gt;   8:  &lt;/span&gt;            }&lt;span class="lnum"&gt;   9:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; flag&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        },&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        success: &lt;span class="kwrd"&gt;function&lt;/span&gt; (data) {&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            showProcess(&lt;span class="kwrd"&gt;false&lt;/span&gt;);&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (data == 1) {&lt;span class="lnum"&gt;  14:  &lt;/span&gt;                top.showMsg(&lt;span class="str"&gt;'温馨提示'&lt;/span&gt;, &lt;span class="str"&gt;'提交成功！'&lt;/span&gt;);&lt;span class="lnum"&gt;  15:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (parent !== undefined) {&lt;span class="lnum"&gt;  16:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;if&lt;/span&gt; ($.isFunction(window.reloadParent)) {&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                        reloadParent.call();&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                    } &lt;span class="kwrd"&gt;else&lt;/span&gt; {&lt;span class="lnum"&gt;  19:  &lt;/span&gt;                        parent.$(&lt;span class="str"&gt;"#tt"&lt;/span&gt;).datagrid(&lt;span class="str"&gt;'reload'&lt;/span&gt;);&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                        parent.closeMyWindow();&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                    }&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                }&lt;span class="lnum"&gt;  23:  &lt;/span&gt;            } &lt;span class="kwrd"&gt;else&lt;/span&gt; {&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                $.messager.alert(&lt;span class="str"&gt;'温馨提示'&lt;/span&gt;, data);&lt;span class="lnum"&gt;  25:  &lt;/span&gt;            }&lt;span class="lnum"&gt;  26:  &lt;/span&gt;        },&lt;span class="lnum"&gt;  27:  &lt;/span&gt;        onLoadError: &lt;span class="kwrd"&gt;function&lt;/span&gt; () {&lt;span class="lnum"&gt;  28:  &lt;/span&gt;            showProcess(&lt;span class="kwrd"&gt;false&lt;/span&gt;);&lt;span class="lnum"&gt;  29:  &lt;/span&gt;            $.messager.alert(&lt;span class="str"&gt;'温馨提示'&lt;/span&gt;, &lt;span class="str"&gt;'由于网络或服务器太忙，提交失败，请重试！'&lt;/span&gt;);&lt;span class="lnum"&gt;  30:  &lt;/span&gt;        }&lt;span class="lnum"&gt;  31:  &lt;/span&gt;    });&lt;span class="lnum"&gt;  32:  &lt;/span&gt;}关键页面代码如下：&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="easyui-layout"&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;="text-align: left; height: 270px;"&lt;/span&gt; &lt;span class="attr"&gt;fit&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;region&lt;/span&gt;&lt;span class="kwrd"&gt;="center"&lt;/span&gt; &lt;span class="attr"&gt;border&lt;/span&gt;&lt;span class="kwrd"&gt;="false"&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;="padding: 10px; background: #fff; border: 1px solid #ccc;"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="ff"&lt;/span&gt; &lt;span class="attr"&gt;method&lt;/span&gt;&lt;span class="kwrd"&gt;="post"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="hidden"&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="id"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;=""&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;table&lt;/span&gt; &lt;span class="attr"&gt;border&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;cellpadding&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;cellspacing&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;label&lt;/span&gt; &lt;span class="attr"&gt;for&lt;/span&gt;&lt;span class="kwrd"&gt;="AdminLogin"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                            登录名：&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;label&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="easyui-validatebox"&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;="width: 300px;"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text"&lt;/span&gt; &lt;span class="attr"&gt;required&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;                            &lt;span class="attr"&gt;validtype&lt;/span&gt;&lt;span class="kwrd"&gt;="length[0,20]"&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="AdminLogin"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;label&lt;/span&gt; &lt;span class="attr"&gt;for&lt;/span&gt;&lt;span class="kwrd"&gt;="RoleID"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;                            所属角色：&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;label&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="easyui-combobox"&lt;/span&gt; &lt;span class="attr"&gt;valuefield&lt;/span&gt;&lt;span class="kwrd"&gt;="ID"&lt;/span&gt; &lt;span class="attr"&gt;textfield&lt;/span&gt;&lt;span class="kwrd"&gt;="RoleName"&lt;/span&gt; &lt;span class="attr"&gt;panelheight&lt;/span&gt;&lt;span class="kwrd"&gt;="auto"&lt;/span&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;                            &lt;span class="attr"&gt;editable&lt;/span&gt;&lt;span class="kwrd"&gt;="false"&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;="width: 300px;"&lt;/span&gt; &lt;span class="attr"&gt;url&lt;/span&gt;&lt;span class="kwrd"&gt;="/Ajax/Common.ashx?Type=GetRoles"&lt;/span&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;                            &lt;span class="attr"&gt;required&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="RoleID"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt; &lt;span class="attr"&gt;colspan&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;='color: Red'&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  57:  &lt;/span&gt;                        在编辑时，输入管理员密码表示重新设置密码。&lt;span class="lnum"&gt;  58:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  59:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  60:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  61:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  62:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  63:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  64:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  65:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  66:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  67:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;label&lt;/span&gt; &lt;span class="attr"&gt;for&lt;/span&gt;&lt;span class="kwrd"&gt;="AdminPassword"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  68:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  69:  &lt;/span&gt;                            密码：&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;label&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  70:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  71:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  72:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  73:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  74:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  75:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="easyui-validatebox"&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;="width: 300px;"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text"&lt;/span&gt; &lt;span class="attr"&gt;validtype&lt;/span&gt;&lt;span class="kwrd"&gt;="length[6,20]"&lt;/span&gt;&lt;span class="lnum"&gt;  76:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  77:  &lt;/span&gt;                            &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;='txtPassword'&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="AdminPassword"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  78:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  79:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  80:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  81:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  82:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  83:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  84:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  85:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  86:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  87:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;label&lt;/span&gt; &lt;span class="attr"&gt;for&lt;/span&gt;&lt;span class="kwrd"&gt;="AdminPassword2"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  88:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  89:  &lt;/span&gt;                            确认密码：&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;label&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  90:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  91:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  92:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  93:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  94:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  95:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="easyui-validatebox"&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;="width: 300px;"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text"&lt;/span&gt; &lt;span class="attr"&gt;validtype&lt;/span&gt;&lt;span class="kwrd"&gt;="length[6,20]"&lt;/span&gt;&lt;span class="lnum"&gt;  96:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  97:  &lt;/span&gt;                            &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;='txtPassword2'&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="AdminPassword2"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  98:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  99:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt; 100:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 101:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt; 102:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 103:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt; 104:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 105:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt; 106:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 107:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;label&lt;/span&gt; &lt;span class="attr"&gt;for&lt;/span&gt;&lt;span class="kwrd"&gt;="Defatulflag"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt; 108:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 109:  &lt;/span&gt;                            是否上架：&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;label&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt; 110:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 111:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt; 112:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 113:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt; 114:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 115:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="checkbox"&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Defatulflag"&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="easyui-validatebox"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text"&lt;/span&gt;&lt;span class="lnum"&gt; 116:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 117:  &lt;/span&gt;                            &lt;span class="attr"&gt;required&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt; 118:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 119:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt; 120:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 121:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt; 122:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 123:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;table&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt; 124:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 125:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt; 126:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 127:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt; 128:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 129:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;region&lt;/span&gt;&lt;span class="kwrd"&gt;="south"&lt;/span&gt; &lt;span class="attr"&gt;border&lt;/span&gt;&lt;span class="kwrd"&gt;="false"&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;="text-align: right; padding: 5px 5px 5px 0;"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt; 130:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 131:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="easyui-linkbutton"&lt;/span&gt; &lt;span class="attr"&gt;iconcls&lt;/span&gt;&lt;span class="kwrd"&gt;="icon-save"&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="javascript:void(0)"&lt;/span&gt; &lt;span class="attr"&gt;onclick&lt;/span&gt;&lt;span class="kwrd"&gt;="javascript:submitForm();"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt; 132:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 133:  &lt;/span&gt;                提交&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="lnum"&gt; 134:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 135:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt; 136:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 137:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt; 138:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 139:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text/javascript"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt; 140:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 141:  &lt;/span&gt;        $(&lt;span class="kwrd"&gt;function&lt;/span&gt; () {&lt;span class="lnum"&gt; 142:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 143:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (autoLoad == 1) {&lt;span class="lnum"&gt; 144:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 145:  &lt;/span&gt;                $(&lt;span class="str"&gt;'#txtPassword'&lt;/span&gt;).keypress(&lt;span class="kwrd"&gt;function&lt;/span&gt; () {&lt;span class="lnum"&gt; 146:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 147:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;if&lt;/span&gt; ($(&lt;span class="kwrd"&gt;this&lt;/span&gt;).val().length &amp;gt; 0) {&lt;span class="lnum"&gt; 148:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 149:  &lt;/span&gt;                        $(&lt;span class="str"&gt;'#txtPassword2'&lt;/span&gt;).validatebox({&lt;span class="lnum"&gt; 150:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 151:  &lt;/span&gt;                            required: &lt;span class="kwrd"&gt;true&lt;/span&gt;&lt;span class="lnum"&gt; 152:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 153:  &lt;/span&gt;                        });&lt;span class="lnum"&gt; 154:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 155:  &lt;/span&gt;                    }&lt;span class="lnum"&gt; 156:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 157:  &lt;/span&gt;                }).change(&lt;span class="kwrd"&gt;function&lt;/span&gt; () {&lt;span class="lnum"&gt; 158:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 159:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;if&lt;/span&gt; ($(&lt;span class="kwrd"&gt;this&lt;/span&gt;).val().length &amp;gt; 0) {&lt;span class="lnum"&gt; 160:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 161:  &lt;/span&gt;                        $(&lt;span class="str"&gt;'#txtPassword2'&lt;/span&gt;).validatebox({&lt;span class="lnum"&gt; 162:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 163:  &lt;/span&gt;                            required: &lt;span class="kwrd"&gt;true&lt;/span&gt;&lt;span class="lnum"&gt; 164:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 165:  &lt;/span&gt;                        });&lt;span class="lnum"&gt; 166:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 167:  &lt;/span&gt;                    } &lt;span class="kwrd"&gt;else&lt;/span&gt; {&lt;span class="lnum"&gt; 168:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 169:  &lt;/span&gt;                        $(&lt;span class="str"&gt;'#txtPassword2'&lt;/span&gt;).validatebox({&lt;span class="lnum"&gt; 170:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 171:  &lt;/span&gt;                            required: &lt;span class="kwrd"&gt;false&lt;/span&gt;&lt;span class="lnum"&gt; 172:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 173:  &lt;/span&gt;                        });&lt;span class="lnum"&gt; 174:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 175:  &lt;/span&gt;                    }&lt;span class="lnum"&gt; 176:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 177:  &lt;/span&gt;                });&lt;span class="lnum"&gt; 178:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 179:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 180:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 181:  &lt;/span&gt;            } &lt;span class="kwrd"&gt;else&lt;/span&gt; {&lt;span class="lnum"&gt; 182:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 183:  &lt;/span&gt;                $(&lt;span class="str"&gt;'#txtPassword,#txtPassword2'&lt;/span&gt;).validatebox({&lt;span class="lnum"&gt; 184:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 185:  &lt;/span&gt;                    required: &lt;span class="kwrd"&gt;true&lt;/span&gt;&lt;span class="lnum"&gt; 186:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 187:  &lt;/span&gt;                }); ;&lt;span class="lnum"&gt; 188:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 189:  &lt;/span&gt;            }&lt;span class="lnum"&gt; 190:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 191:  &lt;/span&gt;        });&lt;span class="lnum"&gt; 192:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt; 193:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt; 194:  &lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;style&gt;&lt;!--.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }--&gt;&lt;/style&gt;&lt;div class="csharpcode"&gt;&lt;div class="csharpcode"&gt;&lt;div class="csharpcode"&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="csharpcode"&gt;效果如下：&lt;/div&gt;&lt;div class="csharpcode"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201203/201203252330073411.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201203/201203252330077522.png" alt="image" width="642" height="436" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="csharpcode"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201203/201203252330078918.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201203/201203252330073901.png" alt="image" width="629" height="337" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="csharpcode"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201203/201203252330077805.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201203/201203252330078885.png" alt="image" width="244" height="105" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;hr /&gt;&lt;/div&gt;&lt;/div&gt;&lt;style&gt;&lt;!--.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }--&gt;&lt;/style&gt;&lt;style&gt;&lt;!--.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }--&gt;&lt;/style&gt;&lt;p&gt;&lt;strong&gt;窗口&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;窗口是用的非常频繁的，显示窗口：&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;$(&lt;span class="kwrd"&gt;function&lt;/span&gt; () {&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    $(&lt;span class="str"&gt;'body'&lt;/span&gt;).append(&lt;span class="str"&gt;'&amp;lt;div id="myWindow" class="easyui-dialog" closed="true"&amp;gt;&amp;lt;/div&amp;gt;'&lt;/span&gt;);&lt;span class="lnum"&gt;   3:  &lt;/span&gt;});&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; showMyWindow(title, href, width, height, modal, minimizable, maximizable) {&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    $(&lt;span class="str"&gt;'#myWindow'&lt;/span&gt;).window({&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        title: title,&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        width: width === undefined ? 600 : width,&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        height: height === undefined ? 400 : height,&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        content: &lt;span class="str"&gt;'&amp;lt;iframe scrolling="yes" frameborder="0"  src="'&lt;/span&gt; + href + &lt;span class="str"&gt;'" style="width:100%;height:98%;"&amp;gt;&amp;lt;/iframe&amp;gt;'&lt;/span&gt;,&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="rem"&gt;//        href: href === undefined ? null : href,&lt;/span&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        modal: modal === undefined ? &lt;span class="kwrd"&gt;true&lt;/span&gt; : modal,&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        minimizable: minimizable === undefined ? &lt;span class="kwrd"&gt;false&lt;/span&gt; : minimizable,&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        maximizable: maximizable === undefined ? &lt;span class="kwrd"&gt;false&lt;/span&gt; : maximizable,&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        shadow: &lt;span class="kwrd"&gt;false&lt;/span&gt;,&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        cache: &lt;span class="kwrd"&gt;false&lt;/span&gt;,&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        closed: &lt;span class="kwrd"&gt;false&lt;/span&gt;,&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        collapsible: &lt;span class="kwrd"&gt;false&lt;/span&gt;,&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        resizable: &lt;span class="kwrd"&gt;false&lt;/span&gt;,&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        loadingMessage: &lt;span class="str"&gt;'正在加载数据，请稍等片刻......'&lt;/span&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;    });&lt;span class="lnum"&gt;  21:  &lt;/span&gt;}&lt;/div&gt;&lt;style&gt;&lt;!--.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }--&gt;&lt;/style&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;关闭窗口：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; closeMyWindow() {&lt;/div&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    $(&lt;span class="str"&gt;'#myWindow'&lt;/span&gt;).window(&lt;span class="str"&gt;'close'&lt;/span&gt;);&lt;/div&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;}&lt;/div&gt;&lt;div class="csharpcode"&gt;使用方式如下：&lt;/div&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="kwrd"&gt;function&lt;/span&gt; onDataGridDblClickRow(rowIndex, rowData) {&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            edit();&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        }&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="kwrd"&gt;function&lt;/span&gt; addType() {&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;            showMyWindow(&lt;span class="str"&gt;'用户管理 | 新建'&lt;/span&gt;, &lt;span class="str"&gt;'/WebPages/RoleManagement/AdminUser_Add.aspx'&lt;/span&gt;, 600, 320)&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        }&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        &lt;span class="kwrd"&gt;function&lt;/span&gt; edit() {&lt;span class="lnum"&gt;  14:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;            &lt;span class="kwrd"&gt;var&lt;/span&gt; row = $(&lt;span class="str"&gt;'#tt'&lt;/span&gt;).datagrid(&lt;span class="str"&gt;'getSelected'&lt;/span&gt;);&lt;span class="lnum"&gt;  16:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (row) {&lt;span class="lnum"&gt;  18:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;                showMyWindow(&lt;span class="str"&gt;'用户管理 | 编辑'&lt;/span&gt;, &lt;span class="str"&gt;'/WebPages/RoleManagement/AdminUser_Add.aspx?ID='&lt;/span&gt; + row.ID + &lt;span class="str"&gt;'&amp;amp;autoLoad=1'&lt;/span&gt;, 600, 320)&lt;span class="lnum"&gt;  20:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;            } &lt;span class="kwrd"&gt;else&lt;/span&gt; {&lt;span class="lnum"&gt;  22:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                showMsg(&lt;span class="str"&gt;"温馨提示"&lt;/span&gt;, &lt;span class="str"&gt;"请选择一行！"&lt;/span&gt;);&lt;span class="lnum"&gt;  24:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;            }&lt;span class="lnum"&gt;  26:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;        }&lt;/div&gt;&lt;style&gt;&lt;!--.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }--&gt;&lt;/style&gt;&lt;div class="csharpcode"&gt;窗口弹出有本页弹出，有时由于框架页太小，经常会使用顶层窗口弹出，如：&lt;/div&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="kwrd"&gt;function&lt;/span&gt; showSetPicWindow(adname, id) {&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            top.showMyWindow(adname + &lt;span class="str"&gt;" | 广告图设置"&lt;/span&gt;, &lt;span class="str"&gt;'/WebPages/ADManagement/ADPicturesManagement.aspx?TypeCode=ADPictures&amp;amp;ID='&lt;/span&gt; + id + &lt;span class="str"&gt;'&amp;amp;ATCode=KTVAdvert'&lt;/span&gt;, 707, 440);&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        }&lt;/div&gt;&lt;style&gt;&lt;!--.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }--&gt;&lt;/style&gt;&lt;div class="csharpcode"&gt;效果如下：&lt;/div&gt;&lt;div class="csharpcode"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201203/201203252330071360.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201203/201203252330088819.png" alt="image" width="744" height="420" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="csharpcode"&gt;&lt;hr /&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;表单&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;一个系统总是不乏表单的，自然表单的提交与赋值自然是频繁的。如果使用C#，可以通过反射减少工作量，但是我更趋向把工作量留给前台。比如提交：&lt;/p&gt;&lt;style&gt;&lt;!--.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }--&gt;&lt;/style&gt;&lt;div class="csharpcode"&gt;&lt;div class="csharpcode"&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; submitForm(url) {&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    $(&lt;span class="str"&gt;'#ff'&lt;/span&gt;).form(&lt;span class="str"&gt;'submit'&lt;/span&gt;, {&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        url: (url === undefined ? &lt;span class="str"&gt;"/Ajax/Common.ashx"&lt;/span&gt; : url) + &lt;span class="str"&gt;"?Type="&lt;/span&gt; + typeCode,&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        onSubmit: &lt;span class="kwrd"&gt;function&lt;/span&gt; () {&lt;span class="lnum"&gt;   5:  &lt;/span&gt;            &lt;span class="kwrd"&gt;var&lt;/span&gt; flag = $(&lt;span class="kwrd"&gt;this&lt;/span&gt;).form(&lt;span class="str"&gt;'validate'&lt;/span&gt;);&lt;span class="lnum"&gt;   6:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (flag) {&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                showProcess(&lt;span class="kwrd"&gt;true&lt;/span&gt;, &lt;span class="str"&gt;'温馨提示'&lt;/span&gt;, &lt;span class="str"&gt;'正在提交数据...'&lt;/span&gt;);&lt;span class="lnum"&gt;   8:  &lt;/span&gt;            }&lt;span class="lnum"&gt;   9:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; flag&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        },&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        success: &lt;span class="kwrd"&gt;function&lt;/span&gt; (data) {&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            showProcess(&lt;span class="kwrd"&gt;false&lt;/span&gt;);&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (data == 1) {&lt;span class="lnum"&gt;  14:  &lt;/span&gt;                top.showMsg(&lt;span class="str"&gt;'温馨提示'&lt;/span&gt;, &lt;span class="str"&gt;'提交成功！'&lt;/span&gt;);&lt;span class="lnum"&gt;  15:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (parent !== undefined) {&lt;span class="lnum"&gt;  16:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;if&lt;/span&gt; ($.isFunction(window.reloadParent)) {&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                        reloadParent.call();&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                    } &lt;span class="kwrd"&gt;else&lt;/span&gt; {&lt;span class="lnum"&gt;  19:  &lt;/span&gt;                        parent.$(&lt;span class="str"&gt;"#tt"&lt;/span&gt;).datagrid(&lt;span class="str"&gt;'reload'&lt;/span&gt;);&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                        parent.closeMyWindow();&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                    }&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                }&lt;span class="lnum"&gt;  23:  &lt;/span&gt;            } &lt;span class="kwrd"&gt;else&lt;/span&gt; {&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                $.messager.alert(&lt;span class="str"&gt;'温馨提示'&lt;/span&gt;, data);&lt;span class="lnum"&gt;  25:  &lt;/span&gt;            }&lt;span class="lnum"&gt;  26:  &lt;/span&gt;        },&lt;span class="lnum"&gt;  27:  &lt;/span&gt;        onLoadError: &lt;span class="kwrd"&gt;function&lt;/span&gt; () {&lt;span class="lnum"&gt;  28:  &lt;/span&gt;            showProcess(&lt;span class="kwrd"&gt;false&lt;/span&gt;);&lt;span class="lnum"&gt;  29:  &lt;/span&gt;            $.messager.alert(&lt;span class="str"&gt;'温馨提示'&lt;/span&gt;, &lt;span class="str"&gt;'由于网络或服务器太忙，提交失败，请重试！'&lt;/span&gt;);&lt;span class="lnum"&gt;  30:  &lt;/span&gt;        }&lt;span class="lnum"&gt;  31:  &lt;/span&gt;    });&lt;span class="lnum"&gt;  32:  &lt;/span&gt;}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;style&gt;&lt;!--.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }--&gt;&lt;/style&gt;&lt;p&gt;值得说明的是：&lt;/p&gt;&lt;ol&gt;&lt;li&gt;typeCode来自母版页，为页面名。&lt;/li&gt;&lt;li&gt;url为提交的URL。&lt;/li&gt;&lt;li&gt;onSubmit事件会触发表单验证，如果验证通过会显示提交进度遮罩层。如果觉得不够用，可以自己扩展。&lt;/li&gt;&lt;li&gt;success事件会关闭进度，如果提交成功会显示成功提示，如果存在父窗口，会刷新父页面DataGrid并且关闭当前窗口。当然也可以实现reloadParent函数来个性化处理。&lt;/li&gt;&lt;li&gt;表单id和DataGrid的id都是固定的，如果没有效果请检查id。&lt;/li&gt;&lt;li&gt;关于表单的这里只写了提交，赋值的代码写在母版页了，以后再说。&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;页面html的提交代码如下：&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="easyui-linkbutton"&lt;/span&gt; &lt;span class="attr"&gt;iconcls&lt;/span&gt;&lt;span class="kwrd"&gt;="icon-save"&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="javascript:void(0)"&lt;/span&gt; &lt;span class="attr"&gt;onclick&lt;/span&gt;&lt;span class="kwrd"&gt;="javascript:submitForm('/Ajax/ShortMMS_Common.ashx');"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;                提交&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;有些页面可能刷新DataGrid还不够，需要刷新页面，于是可以使用下面的JS：&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;    &amp;lt;script type=&lt;span class="str"&gt;"text/javascript"&lt;/span&gt;&amp;gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        &lt;span class="kwrd"&gt;function&lt;/span&gt; reloadParent() {&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            top.showProcess(&lt;span class="kwrd"&gt;false&lt;/span&gt;);&lt;span class="lnum"&gt;   4:  &lt;/span&gt;            parent.showMsg(&lt;span class="str"&gt;'温馨提示'&lt;/span&gt;, &lt;span class="str"&gt;'提交成功'&lt;/span&gt;);&lt;span class="lnum"&gt;   5:  &lt;/span&gt;            parent.document.location.reload();&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        }&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &amp;lt;/script&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;style&gt;&lt;!--.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }--&gt;&lt;/style&gt;&lt;style&gt;&lt;!--.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }--&gt;&lt;/style&gt;&lt;div class="csharpcode"&gt;&lt;div class="csharpcode"&gt;&lt;p&gt;最后，附上完整的JS代码：&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="rem"&gt;//时间格式化&lt;/span&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;Date.prototype.format = &lt;span class="kwrd"&gt;function&lt;/span&gt; (format) {&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (!format) {&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        format = &lt;span class="str"&gt;"yyyy-MM-dd hh:mm:ss"&lt;/span&gt;;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    }&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;var&lt;/span&gt; o = {&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="str"&gt;"M+"&lt;/span&gt;: &lt;span class="kwrd"&gt;this&lt;/span&gt;.getMonth() + 1, &lt;span class="rem"&gt;// month&lt;/span&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &lt;span class="str"&gt;"d+"&lt;/span&gt;: &lt;span class="kwrd"&gt;this&lt;/span&gt;.getDate(), &lt;span class="rem"&gt;// day&lt;/span&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="str"&gt;"h+"&lt;/span&gt;: &lt;span class="kwrd"&gt;this&lt;/span&gt;.getHours(), &lt;span class="rem"&gt;// hour&lt;/span&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="str"&gt;"m+"&lt;/span&gt;: &lt;span class="kwrd"&gt;this&lt;/span&gt;.getMinutes(), &lt;span class="rem"&gt;// minute&lt;/span&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        &lt;span class="str"&gt;"s+"&lt;/span&gt;: &lt;span class="kwrd"&gt;this&lt;/span&gt;.getSeconds(), &lt;span class="rem"&gt;// second&lt;/span&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        &lt;span class="str"&gt;"q+"&lt;/span&gt;: Math.floor((&lt;span class="kwrd"&gt;this&lt;/span&gt;.getMonth() + 3) / 3), &lt;span class="rem"&gt;// quarter&lt;/span&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        &lt;span class="str"&gt;"S"&lt;/span&gt;: &lt;span class="kwrd"&gt;this&lt;/span&gt;.getMilliseconds()&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="rem"&gt;// millisecond&lt;/span&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    };&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (/(y+)/.test(format)) {&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        format = format.replace(RegExp.$1, (&lt;span class="kwrd"&gt;this&lt;/span&gt;.getFullYear() + &lt;span class="str"&gt;""&lt;/span&gt;).substr(4 - RegExp.$1.length));&lt;span class="lnum"&gt;  18:  &lt;/span&gt;    }&lt;span class="lnum"&gt;  19:  &lt;/span&gt;    &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;var&lt;/span&gt; k &lt;span class="kwrd"&gt;in&lt;/span&gt; o) {&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;new&lt;/span&gt; RegExp(&lt;span class="str"&gt;"("&lt;/span&gt; + k + &lt;span class="str"&gt;")"&lt;/span&gt;).test(format)) {&lt;span class="lnum"&gt;  21:  &lt;/span&gt;            format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : (&lt;span class="str"&gt;"00"&lt;/span&gt; + o[k]).substr((&lt;span class="str"&gt;""&lt;/span&gt; + o[k]).length));&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        }&lt;span class="lnum"&gt;  23:  &lt;/span&gt;    }&lt;span class="lnum"&gt;  24:  &lt;/span&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; format;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;};&lt;span class="lnum"&gt;  26:  &lt;/span&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; fomatDate(str) {&lt;span class="lnum"&gt;  27:  &lt;/span&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; (&lt;span class="kwrd"&gt;new&lt;/span&gt; Date(parseInt(str.substring(str.indexOf(&lt;span class="str"&gt;'('&lt;/span&gt;) + 1, str.indexOf(&lt;span class="str"&gt;')'&lt;/span&gt;))))).format(&lt;span class="str"&gt;"yyyy-MM-dd hh:mm:ss"&lt;/span&gt;);&lt;span class="lnum"&gt;  28:  &lt;/span&gt;}&lt;span class="lnum"&gt;  29:  &lt;/span&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; showMsg(title, msg, isAlert) {&lt;span class="lnum"&gt;  30:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (isAlert !== undefined &amp;amp;&amp;amp; isAlert) {&lt;span class="lnum"&gt;  31:  &lt;/span&gt;        $.messager.alert(title, msg);&lt;span class="lnum"&gt;  32:  &lt;/span&gt;    } &lt;span class="kwrd"&gt;else&lt;/span&gt; {&lt;span class="lnum"&gt;  33:  &lt;/span&gt;        $.messager.show({&lt;span class="lnum"&gt;  34:  &lt;/span&gt;            title: title,&lt;span class="lnum"&gt;  35:  &lt;/span&gt;            msg: msg,&lt;span class="lnum"&gt;  36:  &lt;/span&gt;            showType: &lt;span class="str"&gt;'show'&lt;/span&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;        });&lt;span class="lnum"&gt;  38:  &lt;/span&gt;    }&lt;span class="lnum"&gt;  39:  &lt;/span&gt;}&lt;span class="lnum"&gt;  40:  &lt;/span&gt;$(&lt;span class="kwrd"&gt;function&lt;/span&gt; () {&lt;span class="lnum"&gt;  41:  &lt;/span&gt;    $(&lt;span class="str"&gt;'body'&lt;/span&gt;).append(&lt;span class="str"&gt;'&amp;lt;div id="myWindow" class="easyui-dialog" closed="true"&amp;gt;&amp;lt;/div&amp;gt;'&lt;/span&gt;);&lt;span class="lnum"&gt;  42:  &lt;/span&gt;});&lt;span class="lnum"&gt;  43:  &lt;/span&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; showMyWindow(title, href, width, height, modal, minimizable, maximizable) {&lt;span class="lnum"&gt;  44:  &lt;/span&gt;    $(&lt;span class="str"&gt;'#myWindow'&lt;/span&gt;).window({&lt;span class="lnum"&gt;  45:  &lt;/span&gt;        title: title,&lt;span class="lnum"&gt;  46:  &lt;/span&gt;        width: width === undefined ? 600 : width,&lt;span class="lnum"&gt;  47:  &lt;/span&gt;        height: height === undefined ? 400 : height,&lt;span class="lnum"&gt;  48:  &lt;/span&gt;        content: &lt;span class="str"&gt;'&amp;lt;iframe scrolling="yes" frameborder="0"  src="'&lt;/span&gt; + href + &lt;span class="str"&gt;'" style="width:100%;height:98%;"&amp;gt;&amp;lt;/iframe&amp;gt;'&lt;/span&gt;,&lt;span class="lnum"&gt;  49:  &lt;/span&gt;        &lt;span class="rem"&gt;//        href: href === undefined ? null : href,&lt;/span&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;        modal: modal === undefined ? &lt;span class="kwrd"&gt;true&lt;/span&gt; : modal,&lt;span class="lnum"&gt;  51:  &lt;/span&gt;        minimizable: minimizable === undefined ? &lt;span class="kwrd"&gt;false&lt;/span&gt; : minimizable,&lt;span class="lnum"&gt;  52:  &lt;/span&gt;        maximizable: maximizable === undefined ? &lt;span class="kwrd"&gt;false&lt;/span&gt; : maximizable,&lt;span class="lnum"&gt;  53:  &lt;/span&gt;        shadow: &lt;span class="kwrd"&gt;false&lt;/span&gt;,&lt;span class="lnum"&gt;  54:  &lt;/span&gt;        cache: &lt;span class="kwrd"&gt;false&lt;/span&gt;,&lt;span class="lnum"&gt;  55:  &lt;/span&gt;        closed: &lt;span class="kwrd"&gt;false&lt;/span&gt;,&lt;span class="lnum"&gt;  56:  &lt;/span&gt;        collapsible: &lt;span class="kwrd"&gt;false&lt;/span&gt;,&lt;span class="lnum"&gt;  57:  &lt;/span&gt;        resizable: &lt;span class="kwrd"&gt;false&lt;/span&gt;,&lt;span class="lnum"&gt;  58:  &lt;/span&gt;        loadingMessage: &lt;span class="str"&gt;'正在加载数据，请稍等片刻......'&lt;/span&gt;&lt;span class="lnum"&gt;  59:  &lt;/span&gt;    });&lt;span class="lnum"&gt;  60:  &lt;/span&gt;}&lt;span class="lnum"&gt;  61:  &lt;/span&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; closeMyWindow() {&lt;span class="lnum"&gt;  62:  &lt;/span&gt;    $(&lt;span class="str"&gt;'#myWindow'&lt;/span&gt;).window(&lt;span class="str"&gt;'close'&lt;/span&gt;);&lt;span class="lnum"&gt;  63:  &lt;/span&gt;}&lt;span class="lnum"&gt;  64:  &lt;/span&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; submitForm(url) {&lt;span class="lnum"&gt;  65:  &lt;/span&gt;    $(&lt;span class="str"&gt;'#ff'&lt;/span&gt;).form(&lt;span class="str"&gt;'submit'&lt;/span&gt;, {&lt;span class="lnum"&gt;  66:  &lt;/span&gt;        url: (url === undefined ? &lt;span class="str"&gt;"/Ajax/Common.ashx"&lt;/span&gt; : url) + &lt;span class="str"&gt;"?Type="&lt;/span&gt; + typeCode,&lt;span class="lnum"&gt;  67:  &lt;/span&gt;        onSubmit: &lt;span class="kwrd"&gt;function&lt;/span&gt; () {&lt;span class="lnum"&gt;  68:  &lt;/span&gt;            &lt;span class="kwrd"&gt;var&lt;/span&gt; flag = $(&lt;span class="kwrd"&gt;this&lt;/span&gt;).form(&lt;span class="str"&gt;'validate'&lt;/span&gt;);&lt;span class="lnum"&gt;  69:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (flag) {&lt;span class="lnum"&gt;  70:  &lt;/span&gt;                showProcess(&lt;span class="kwrd"&gt;true&lt;/span&gt;, &lt;span class="str"&gt;'温馨提示'&lt;/span&gt;, &lt;span class="str"&gt;'正在提交数据...'&lt;/span&gt;);&lt;span class="lnum"&gt;  71:  &lt;/span&gt;            }&lt;span class="lnum"&gt;  72:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; flag&lt;span class="lnum"&gt;  73:  &lt;/span&gt;        },&lt;span class="lnum"&gt;  74:  &lt;/span&gt;        success: &lt;span class="kwrd"&gt;function&lt;/span&gt; (data) {&lt;span class="lnum"&gt;  75:  &lt;/span&gt;            showProcess(&lt;span class="kwrd"&gt;false&lt;/span&gt;);&lt;span class="lnum"&gt;  76:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (data == 1) {&lt;span class="lnum"&gt;  77:  &lt;/span&gt;                top.showMsg(&lt;span class="str"&gt;'温馨提示'&lt;/span&gt;, &lt;span class="str"&gt;'提交成功！'&lt;/span&gt;);&lt;span class="lnum"&gt;  78:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (parent !== undefined) {&lt;span class="lnum"&gt;  79:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;if&lt;/span&gt; ($.isFunction(window.reloadParent)) {&lt;span class="lnum"&gt;  80:  &lt;/span&gt;                        reloadParent.call();&lt;span class="lnum"&gt;  81:  &lt;/span&gt;                    } &lt;span class="kwrd"&gt;else&lt;/span&gt; {&lt;span class="lnum"&gt;  82:  &lt;/span&gt;                        parent.$(&lt;span class="str"&gt;"#tt"&lt;/span&gt;).datagrid(&lt;span class="str"&gt;'reload'&lt;/span&gt;);&lt;span class="lnum"&gt;  83:  &lt;/span&gt;                        parent.closeMyWindow();&lt;span class="lnum"&gt;  84:  &lt;/span&gt;                    }&lt;span class="lnum"&gt;  85:  &lt;/span&gt;                }&lt;span class="lnum"&gt;  86:  &lt;/span&gt;            } &lt;span class="kwrd"&gt;else&lt;/span&gt; {&lt;span class="lnum"&gt;  87:  &lt;/span&gt;                $.messager.alert(&lt;span class="str"&gt;'温馨提示'&lt;/span&gt;, data);&lt;span class="lnum"&gt;  88:  &lt;/span&gt;            }&lt;span class="lnum"&gt;  89:  &lt;/span&gt;        },&lt;span class="lnum"&gt;  90:  &lt;/span&gt;        onLoadError: &lt;span class="kwrd"&gt;function&lt;/span&gt; () {&lt;span class="lnum"&gt;  91:  &lt;/span&gt;            showProcess(&lt;span class="kwrd"&gt;false&lt;/span&gt;);&lt;span class="lnum"&gt;  92:  &lt;/span&gt;            $.messager.alert(&lt;span class="str"&gt;'温馨提示'&lt;/span&gt;, &lt;span class="str"&gt;'由于网络或服务器太忙，提交失败，请重试！'&lt;/span&gt;);&lt;span class="lnum"&gt;  93:  &lt;/span&gt;        }&lt;span class="lnum"&gt;  94:  &lt;/span&gt;    });&lt;span class="lnum"&gt;  95:  &lt;/span&gt;}&lt;span class="lnum"&gt;  96:  &lt;/span&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; deleteConfirm() {&lt;span class="lnum"&gt;  97:  &lt;/span&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; showConfirm(&lt;span class="str"&gt;'温馨提示'&lt;/span&gt;, &lt;span class="str"&gt;'确定要删除吗?'&lt;/span&gt;);&lt;span class="lnum"&gt;  98:  &lt;/span&gt;}&lt;span class="lnum"&gt;  99:  &lt;/span&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; showConfirm(title, msg, callback) {&lt;span class="lnum"&gt; 100:  &lt;/span&gt;    $.messager.confirm(title, msg, &lt;span class="kwrd"&gt;function&lt;/span&gt; (r) {&lt;span class="lnum"&gt; 101:  &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (r) {&lt;span class="lnum"&gt; 102:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (jQuery.isFunction(callback))&lt;span class="lnum"&gt; 103:  &lt;/span&gt;                callback.call();&lt;span class="lnum"&gt; 104:  &lt;/span&gt;        }&lt;span class="lnum"&gt; 105:  &lt;/span&gt;    });&lt;span class="lnum"&gt; 106:  &lt;/span&gt;}&lt;span class="lnum"&gt; 107:  &lt;/span&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; showProcess(isShow, title, msg) {&lt;span class="lnum"&gt; 108:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (!isShow) {&lt;span class="lnum"&gt; 109:  &lt;/span&gt;        $.messager.progress(&lt;span class="str"&gt;'close'&lt;/span&gt;);&lt;span class="lnum"&gt; 110:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt;;&lt;span class="lnum"&gt; 111:  &lt;/span&gt;    }&lt;span class="lnum"&gt; 112:  &lt;/span&gt;    &lt;span class="kwrd"&gt;var&lt;/span&gt; win = $.messager.progress({&lt;span class="lnum"&gt; 113:  &lt;/span&gt;        title: title,&lt;span class="lnum"&gt; 114:  &lt;/span&gt;        msg: msg&lt;span class="lnum"&gt; 115:  &lt;/span&gt;    });&lt;span class="lnum"&gt; 116:  &lt;/span&gt;}&lt;span class="lnum"&gt; 117:  &lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;style&gt;&lt;!--.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }--&gt;&lt;/style&gt;&lt;div class="csharpcode"&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="csharpcode"&gt;这篇就写到这里吧。如有不足之处，还望大家补充。累了，就先写到这里了。&lt;/div&gt;&lt;img src="http://www.cnblogs.com/codelove/aggbug/2417235.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/codelove/archive/2012/03/25/2417235.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/codelove/archive/2012/03/19/2405408.html</id><title type="text">JQuery EasyUi之界面设计——前言与界面效果（一）</title><summary type="text">如果冯巩的开场白是“观众朋友们，我想死你们了”，那么我的开场白是“最近一直很忙，很久没有发文了”。前面说过了EXT.NET，这里顺便再说说JQuery EasyUI。为啥我会选择JQuery EasyUI呢？主要有以下几点：轻量级。基本的组件都用，即“麻雀虽小五脏俱全”。使用简洁方便，比如支持html+js。可扩展性。可维护性。世上没有完美的产品，而且其对IE6的兼容性还存在一些问题，但相比extjs，其还是很方便阅读和修改的。简单性。这既是优点也是缺点。比如icon，自带的就那么几个，像我这样的懒人，就用那么几个就够了，extjs的图标选择起来都比较麻烦。如果实在不够用，就去extjs里面找</summary><published>2012-03-18T16:45:00Z</published><updated>2012-03-18T16:45:00Z</updated><author><name>雪雁</name><uri>http://www.cnblogs.com/codelove/</uri></author><link rel="alternate" href="http://www.cnblogs.com/codelove/archive/2012/03/19/2405408.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/codelove/archive/2012/03/19/2405408.html"/><content type="html">&lt;p&gt;如果冯巩的开场白是&amp;ldquo;观众朋友们，我想死你们了&amp;rdquo;，那么我的开场白是&amp;ldquo;最近一直很忙，很久没有发文了&amp;rdquo;。&lt;/p&gt;&lt;p&gt;前面说过了EXT.NET，这里顺便再说说JQuery EasyUI。为啥我会选择JQuery EasyUI呢？主要有以下几点：&lt;/p&gt;&lt;ol&gt;&lt;li&gt;轻量级。&lt;/li&gt;&lt;li&gt;基本的组件都用，即&amp;ldquo;麻雀虽小五脏俱全&amp;rdquo;。&lt;/li&gt;&lt;li&gt;使用简洁方便，比如支持html+js。&lt;/li&gt;&lt;li&gt;可扩展性。&lt;/li&gt;&lt;li&gt;可维护性。世上没有完美的产品，而且其对IE6的兼容性还存在一些问题，但相比extjs，其还是很方便阅读和修改的。&lt;/li&gt;&lt;li&gt;简单性。这既是优点也是缺点。比如icon，自带的就那么几个，像我这样的懒人，就用那么几个就够了，extjs的图标选择起来都比较麻烦。如果实在不够用，就去extjs里面找几个加上。再比如组件的使用，官方文档的描述也就那么几页，使用起来，也就那么几个方法与事件，但基本够用了。&lt;/li&gt;&lt;li&gt;个人不喜欢固步自封，喜好使用对自己来说有点神秘和陌生的技术。&lt;/li&gt;&lt;li&gt;extjs如一个行动不便的美妇，其脚本太庞大，对象太丰富，并且不利于维护；ext.net如一个打扮得花枝招展的裹脚的妇女，其将extjs封装成服务器控件，虽然其维护起来不错，体验不错，使用方便，但是我不喜欢使用服务器控件的这种方式，也不喜欢其包了一层有一层的外壳，调起问题来从ASP.NET到EXT.NET到extjs；而easyui，则如一个清纯的少女，从外表即可窥探内心，清秀而不失美观。&lt;/li&gt;&lt;li&gt;其他。&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;最近手上有个私活，于是就试试了。现在项目已经基本完工了。那么我就来说说EasyUi这个系列吧。由于时间有限，会分几篇说（一定会说完），而且更新时间不会固定，敬请谅解。&lt;/p&gt;&lt;p&gt;在此之前，先说说编写本系列的计划吧：&lt;/p&gt;&lt;ol&gt;&lt;li&gt;JQuery EasyUi之界面设计&amp;mdash;&amp;mdash;前言与界面效果（一）&lt;/li&gt;&lt;li&gt;JQuery EasyUi之界面设计&amp;mdash;&amp;mdash;通用的JavaScript（二）&lt;/li&gt;&lt;li&gt;JQuery EasyUi之界面设计&amp;mdash;&amp;mdash;母版页以及Ajax的通用处理（三）&lt;/li&gt;&lt;li&gt;JQuery EasyUi之界面设计&amp;mdash;&amp;mdash;代码详解（四）&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;下面先从界面效果开始吧。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;首页&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201203/201203190044477989.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201203/201203190044486975.png" alt="image" width="840" height="467" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;首页的样式是扒的官网DEMO，但是与其不同的是，其右侧是一个框架，我这里的右侧换成了一个tab，对于管理系统来说，使用tab更方便。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;内容展现页面&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201203/201203190044486136.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201203/201203190044495613.png" alt="image" width="787" height="571" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;上面的按钮时类型，使用的是&lt;a href="http://www.jeasyui.com/documentation/linkbutton.php"&gt;linkbutton&lt;/a&gt;实现的特效。下面区域使用的是&lt;a href="http://www.jeasyui.com/documentation/datagrid.php"&gt;datagrid&lt;/a&gt;，查询放在顶部工具栏。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;弹出窗口&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201203/201203190044492581.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201203/201203190044495646.png" alt="image" width="815" height="511" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;弹出窗口可以用于新增|编辑，也可以用于其他功能，这个效果与extjs的window差不多。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;新增与编辑&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201203/201203190044494250.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201203/201203190044491775.png" alt="image" width="809" height="508" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;easyui的form自带验证、提交、重置与赋值，使用起来简单方便。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;提示框&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201203/201203190044505712.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201203/201203190044509649.png" alt="image" width="393" height="260" border="0" /&gt;&lt;/a&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201203/201203190044504665.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201203/201203190044501318.png" alt="image" width="384" height="259" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201203/201203190044504698.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201203/201203190044503303.png" alt="image" width="391" height="246" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/codelove/aggbug/2405408.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/codelove/archive/2012/03/19/2405408.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/codelove/archive/2012/01/29/2331479.html</id><title type="text">代码重构——程序员应有的基因</title><summary type="text">去年帮另一个项目组赶项目时，总是有很多地方令我不舒服。本人编码有点小小的“洁癖”——即不喜欢见到冗余代码。即时现在忙，没时间整理，但是一有时间，我都尽可能的去重构。也许本人是个完美主义者吧。个人认为重构有以下好处：改善软件的性能、质量。使架构更加合理。使代码更容易被理解。提高软件的扩展性和可维护性。提高代码的重用率，通用性。提高软件的开发速度。更容易发现BUG。可以提高开发人员的开发水平。在我见过的很多代码中，很多程序员宁愿无限复制粘贴代码，也不愿意重构代码。比如经常可以看到这样一个Switch结构中，每个Case块除了某个参数不同，里面的代码几乎一模一样。看到这种代码，不知道是我的悲哀，还是</summary><published>2012-01-29T14:18:00Z</published><updated>2012-01-29T14:18:00Z</updated><author><name>雪雁</name><uri>http://www.cnblogs.com/codelove/</uri></author><link rel="alternate" href="http://www.cnblogs.com/codelove/archive/2012/01/29/2331479.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/codelove/archive/2012/01/29/2331479.html"/><content type="html">&lt;p&gt;去年帮另一个项目组赶项目时，总是有很多地方令我不舒服。本人编码有点小小的&amp;ldquo;洁癖&amp;rdquo;&amp;mdash;&amp;mdash;即不喜欢见到冗余代码。即时现在忙，没时间整理，但是一有时间，我都尽可能的去重构。也许本人是个完美主义者吧。&lt;/p&gt;&lt;p&gt;个人认为重构有以下好处：&lt;/p&gt;&lt;ul&gt;&lt;li&gt;改善软件的性能、质量。&lt;/li&gt;&lt;li&gt;使架构更加合理。&lt;/li&gt;&lt;li&gt;使代码更容易被理解。&lt;/li&gt;&lt;li&gt;提高软件的扩展性和可维护性。&lt;/li&gt;&lt;li&gt;提高代码的重用率，通用性。&lt;/li&gt;&lt;li&gt;提高软件的开发速度。&lt;/li&gt;&lt;li&gt;更容易发现BUG。&lt;/li&gt;&lt;li&gt;可以提高开发人员的开发水平。&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;在我见过的很多代码中，很多程序员宁愿无限复制粘贴代码，也不愿意重构代码。比如经常可以看到这样一个Switch结构中，每个Case块除了某个参数不同，里面的代码几乎一模一样。看到这种代码，不知道是我的悲哀，还是他的悲哀。&lt;/p&gt;&lt;p&gt;这里就展开说说：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;一、控件绑定&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;在开发表单的时候，我们经常会用到下拉列表。如果是服务器控件，我们通常会在后台绑定，但如果是html控件，我们通常需要写JavaScript来绑定，比如下面这个例子：&lt;/p&gt;$.post(siteBase + &lt;span style="color: maroon;"&gt;"MktUser/Op.aspx?op=items"&lt;/span&gt;, {}, &lt;span style="color: blue;"&gt;function&lt;/span&gt;(res) {&lt;br/&gt;    &lt;span style="color: blue;"&gt;if &lt;/span&gt;(res != &lt;span style="color: blue;"&gt;null&lt;/span&gt;) {&lt;br/&gt;        &lt;span style="color: #006400;"&gt;// 事业别&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: blue;"&gt;var &lt;/span&gt;html = &lt;span style="color: maroon;"&gt;"&amp;lt;option value=''&amp;gt;&amp;lt;/option&amp;gt;"&lt;/span&gt;;&lt;br/&gt;        $(res.Data.items).each(&lt;span style="color: blue;"&gt;function&lt;/span&gt;(i, item) {&lt;br/&gt;            html += &lt;span style="color: maroon;"&gt;"&amp;lt;option value='" &lt;/span&gt;+ item.Id + &lt;span style="color: maroon;"&gt;"'&amp;gt;" &lt;/span&gt;+ item.Name + &lt;span style="color: maroon;"&gt;"&amp;lt;/option&amp;gt;"&lt;/span&gt;;&lt;br/&gt;        });&lt;br/&gt;        $(&lt;span style="color: maroon;"&gt;"#item_id"&lt;/span&gt;).html(html);&lt;br/&gt;    }&lt;br/&gt;}, &lt;span style="color: maroon;"&gt;'json'&lt;/span&gt;);&lt;br/&gt;这是一个绑定下拉列表（select）的例子，如果每次都写这么多，一个不太复杂的页面也会让这些代码占满，那么我们可以重构下，如下面的代码：&lt;span style="color: blue;"&gt;function &lt;/span&gt;setSelect(se, key, data, val, txt, seval, setf) {&lt;br/&gt;    $.post(&lt;span style="color: maroon;"&gt;"Op.aspx?op=" &lt;/span&gt;+ key, data, &lt;span style="color: blue;"&gt;function &lt;/span&gt;(res) {&lt;br/&gt;        &lt;span style="color: blue;"&gt;if &lt;/span&gt;(res != &lt;span style="color: blue;"&gt;null&lt;/span&gt;) {&lt;br/&gt;            &lt;span style="color: blue;"&gt;var &lt;/span&gt;html = &lt;span style="color: maroon;"&gt;"&amp;lt;option value=''&amp;gt;&amp;lt;/option&amp;gt;"&lt;/span&gt;;&lt;br/&gt;            &lt;span style="color: blue;"&gt;var &lt;/span&gt;jsonData = (res.Data.items !== undefined ? res.Data.items : res.Data);&lt;br/&gt;            $(jsonData).each(&lt;span style="color: blue;"&gt;function &lt;/span&gt;(i, item) {&lt;br/&gt;                &lt;span style="color: blue;"&gt;var &lt;/span&gt;jTxt = &lt;span style="color: maroon;"&gt;''&lt;/span&gt;;&lt;br/&gt;                &lt;span style="color: blue;"&gt;var &lt;/span&gt;jVal = &lt;span style="color: maroon;"&gt;''&lt;/span&gt;;&lt;br/&gt;                $.each(item, &lt;span style="color: blue;"&gt;function &lt;/span&gt;(j) {&lt;br/&gt;                    &lt;span style="color: blue;"&gt;if &lt;/span&gt;(j == val)&lt;br/&gt;                        jVal = item[j];&lt;br/&gt;                    &lt;span style="color: blue;"&gt;else if &lt;/span&gt;(j == txt)&lt;br/&gt;                        jTxt = item[j];&lt;br/&gt;                });&lt;br/&gt;                html += &lt;span style="color: maroon;"&gt;"&amp;lt;option value='" &lt;/span&gt;+ jVal + &lt;span style="color: maroon;"&gt;"' " &lt;/span&gt;+ ((seval !== undefined &amp;amp;&amp;amp; seval == jVal) ? &lt;span style="color: maroon;"&gt;"selected='selected'" &lt;/span&gt;: &lt;span style="color: maroon;"&gt;""&lt;/span&gt;) + &lt;span style="color: maroon;"&gt;"&amp;gt;" &lt;/span&gt;+ jTxt + &lt;span style="color: maroon;"&gt;"&amp;lt;/option&amp;gt;"&lt;/span&gt;;&lt;br/&gt;            });&lt;br/&gt;            $(se).html(html);&lt;br/&gt;            &lt;span style="color: blue;"&gt;if &lt;/span&gt;(setf !== undefined)&lt;br/&gt;                setTimeout(setf, 100);&lt;br/&gt;        }&lt;br/&gt;    }, &lt;span style="color: maroon;"&gt;'json'&lt;/span&gt;);&lt;br/&gt;}&lt;br/&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;二、代码简化、灵活运用&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;很多代码我们可以简化或者灵活运用。关于简化，比如使用三元运算符。关于灵活运用，比如很多朋友喜欢将不为空的判断写死在JS里，那么我们也可以换一种方式，比如使用html元素的自定义属性或者文本来判断，比如：&lt;/p&gt;&lt;span style="color: blue;"&gt;function &lt;/span&gt;valText() {&lt;br/&gt;    &lt;span style="color: blue;"&gt;var &lt;/span&gt;isFlag = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;br/&gt;    $(&lt;span style="color: maroon;"&gt;"td:contains('*')"&lt;/span&gt;).each(&lt;span style="color: blue;"&gt;function &lt;/span&gt;() {&lt;br/&gt;        &lt;span style="color: blue;"&gt;var &lt;/span&gt;lbl = $(&lt;span style="color: blue;"&gt;this&lt;/span&gt;).text();&lt;br/&gt;        $(&lt;span style="color: blue;"&gt;this&lt;/span&gt;).next().find(&lt;span style="color: maroon;"&gt;"input,select"&lt;/span&gt;).each(&lt;span style="color: blue;"&gt;function &lt;/span&gt;() {&lt;br/&gt;            &lt;span style="color: blue;"&gt;if &lt;/span&gt;($(&lt;span style="color: blue;"&gt;this&lt;/span&gt;).val() == &lt;span style="color: maroon;"&gt;''&lt;/span&gt;) {&lt;br/&gt;                alert(&lt;span style="color: maroon;"&gt;"请填写：o" &lt;/span&gt;+ lbl);&lt;br/&gt;                isFlag = &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;br/&gt;                &lt;span style="color: blue;"&gt;return &lt;/span&gt;isFlag;&lt;br/&gt;            }&lt;br/&gt;        });&lt;br/&gt;        &lt;span style="color: blue;"&gt;if &lt;/span&gt;(!isFlag)&lt;br/&gt;            &lt;span style="color: blue;"&gt;return &lt;/span&gt;isFlag;&lt;br/&gt;    });&lt;br/&gt;    &lt;span style="color: blue;"&gt;return &lt;/span&gt;isFlag;&lt;br/&gt;}&lt;br/&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;三、代码归类&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;很多人经常羡慕别人有代码库，自己总是没有呢？其实在平常编码中，只要用心重构就会有了。&lt;/p&gt;&lt;p&gt;在你重构代码的时候，一般你就会思考，如何重构才能够更优，如何重构这段代码就能尽可能多的重复利用（以后也能用），于是乎，有时你会去找找相关的代码，有时你会把类似的处理逻辑的代码统一放在一起，比如邮件处理的代码、文件操作的代码等等。如果是C#，你可以归类，如果是JS，你可以考虑放到一个JS文件里。&lt;/p&gt;&lt;p&gt;关于这些，大家可以从这里&lt;a href="http://www.cnblogs.com/zjyuan/archive/2011/11/06/2237883.html" target="_blank"&gt;《也把咱的小类库拿出来晒晒》&lt;/a&gt;打劫。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;四、提取函数&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;提取函数很实用，在VS中使用快捷键&amp;mdash;&amp;mdash;Ctrl+R+M就能实现提取方法了。提取方法一方面方便代码重用，另一方面也增加了发现问题的几率。比如看下面的异常：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;_shutDownMessage=关键目录的更改通知。&lt;br/&gt;bin dir change or directory rename&lt;br/&gt;HostingEnvironment initiated shutdown&lt;br/&gt;关键目录的更改通知。&lt;br/&gt;bin dir change or directory rename&lt;br/&gt;HostingEnvironment 导致关闭&lt;br/&gt;&lt;br/&gt;_shutDownStack=   在 System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)&lt;br/&gt;   在 System.Environment.get_StackTrace()&lt;br/&gt;   在 System.Web.Hosting.HostingEnvironment.InitiateShutdownInternal()&lt;br/&gt;   在 System.Web.Hosting.HostingEnvironment.InitiateShutdown()&lt;br/&gt;   在 System.Web.HttpRuntime.ShutdownAppDomain(String stackTrace)&lt;br/&gt;   在 System.Web.HttpRuntime.OnCriticalDirectoryChange(Object sender, FileChangeEvent e)&lt;br/&gt;   在 System.Web.FileChangesMonitor.OnCriticaldirChange(Object sender, FileChangeEvent e)&lt;br/&gt;   在 System.Web.DirectoryMonitor.FireNotifications()&lt;br/&gt;   在 System.Web.Util.WorkItem.CallCallbackWithAssert(WorkItemCallback callback)&lt;br/&gt;   在 System.Web.Util.WorkItem.OnQueueUserWorkItemCompletion(Object state)&lt;br/&gt;   在 System.Threading._ThreadPoolWaitCallback.WaitCallback_Context(Object state)&lt;br/&gt;   在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)&lt;br/&gt;   在 System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal(_ThreadPoolWaitCallback tpWaitCallBack)&lt;br/&gt;   在 System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(Object state)从上面文字中，我们可以看到异常捕获是到方法为止的，比如类似于&amp;ldquo;未将对象引用到对象的实例&amp;rdquo;异常，如果没有报出具体对象的话，茫茫代码中是很难查找的（在很多情况下无法调试或者无法模拟当时环境时），但是我们可以从最后提示的执行的方法名来限定问题代码范围，然后仔细检查推敲。&amp;nbsp;&amp;nbsp;&lt;p&gt;&lt;strong&gt;五、方法重载&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;有时候，可能要满足多种需求，但是又不想更改代码，那么方法重载就能派上用场了。比如下面两个方法：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="rem"&gt;/// 将string类型的fDateTime转换为formatStr格式的日期类型&lt;/span&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;      &lt;/span&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetStandardDateTime(&lt;span class="kwrd"&gt;string&lt;/span&gt; fDateTime, &lt;span class="kwrd"&gt;string&lt;/span&gt; formatStr)&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    {&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        DateTime s = Convert.ToDateTime(fDateTime);&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; s.ToString(formatStr);&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    }&lt;span class="lnum"&gt;   9:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="rem"&gt;///将string类型的fDateTime转换为日期类型 yyyy-MM-dd HH:mm:ss&lt;/span&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;/sumary&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetStandardDateTime(&lt;span class="kwrd"&gt;string&lt;/span&gt; fDateTime)&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    {&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; GetStandardDateTime(fDateTime, &lt;span class="str"&gt;"yyyy-MM-dd HH:mm:ss"&lt;/span&gt;);&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    }&lt;/div&gt;&lt;style&gt;&lt;!--.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }--&gt;&lt;/style&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;style&gt;&lt;!--.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }--&gt;&lt;/style&gt;&lt;p&gt;&lt;strong&gt;最后&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;写了这么多，就此结束吧。&lt;/p&gt;&lt;p&gt;如果你还沉浸在日复一日的重复编码中，那么就想想重构吧。重构也是个费力活，但是却可以让你更上一层楼。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/codelove/aggbug/2331479.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/codelove/archive/2012/01/29/2331479.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/codelove/archive/2012/01/05/2313765.html</id><title type="text">EXT.NET复杂布局（四）——系统首页设计（下）</title><summary type="text">此篇为EXT.NET系列终结篇。希望此系列能够对大家有所帮助。首页JS函数介绍使然使用了Ext.NET，但是JavaScript的地位还是举足轻重的。1.添加选项卡 1: var addTab = function (id, url, title) { 2: var tab = tplCenter.getComponent(id); 3: if (!tab) { 4: tab = tplCenter.add({ 5: id: id...</summary><published>2012-01-05T14:35:00Z</published><updated>2012-01-05T14:35:00Z</updated><author><name>雪雁</name><uri>http://www.cnblogs.com/codelove/</uri></author><link rel="alternate" href="http://www.cnblogs.com/codelove/archive/2012/01/05/2313765.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/codelove/archive/2012/01/05/2313765.html"/><content type="html">&lt;p&gt;此篇为EXT.NET系列终结篇。希望此系列能够对大家有所帮助。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;首页JS函数介绍&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;使然使用了Ext.NET，但是JavaScript的地位还是举足轻重的。&lt;/p&gt;&lt;p&gt;1.添加选项卡&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="kwrd"&gt;var&lt;/span&gt; addTab = &lt;span class="kwrd"&gt;function&lt;/span&gt; (id, url, title) {&lt;span class="lnum"&gt;   2:  &lt;/span&gt;            &lt;span class="kwrd"&gt;var&lt;/span&gt; tab = tplCenter.getComponent(id);&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!tab) {&lt;span class="lnum"&gt;   4:  &lt;/span&gt;                tab = tplCenter.add({&lt;span class="lnum"&gt;   5:  &lt;/span&gt;                    id: id,&lt;span class="lnum"&gt;   6:  &lt;/span&gt;                    title: title,&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                    closable: &lt;span class="kwrd"&gt;true&lt;/span&gt;,&lt;span class="lnum"&gt;   8:  &lt;/span&gt;                    autoLoad: {&lt;span class="lnum"&gt;   9:  &lt;/span&gt;                        showMask: &lt;span class="kwrd"&gt;true&lt;/span&gt;,&lt;span class="lnum"&gt;  10:  &lt;/span&gt;                        url: url,&lt;span class="lnum"&gt;  11:  &lt;/span&gt;                        mode: &lt;span class="str"&gt;"iframe"&lt;/span&gt;,&lt;span class="lnum"&gt;  12:  &lt;/span&gt;                        maskMsg: &lt;span class="str"&gt;"正在加载  "&lt;/span&gt; + title + &lt;span class="str"&gt;" ..."&lt;/span&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;                    }&lt;span class="lnum"&gt;  14:  &lt;/span&gt;                });&lt;span class="lnum"&gt;  15:  &lt;/span&gt;            }&lt;span class="lnum"&gt;  16:  &lt;/span&gt;            tplCenter.setActiveTab(tab);&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        }&lt;/div&gt;&lt;p&gt;注意maskMsg，它有以下效果：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201201/201201052234437522.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201201/201201052234431949.png" alt="image" width="211" height="71" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;2.显示消息&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="kwrd"&gt;function&lt;/span&gt; showMsg(title, content) {&lt;span class="lnum"&gt;   2:  &lt;/span&gt;            Ext.net.Notification.show({&lt;span class="lnum"&gt;   3:  &lt;/span&gt;                hideFx: {&lt;span class="lnum"&gt;   4:  &lt;/span&gt;                    fxName: &lt;span class="str"&gt;'switchOff'&lt;/span&gt;,&lt;span class="lnum"&gt;   5:  &lt;/span&gt;                    args: [{}]&lt;span class="lnum"&gt;   6:  &lt;/span&gt;                },&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                showFx: {&lt;span class="lnum"&gt;   8:  &lt;/span&gt;                    args: [&lt;span class="lnum"&gt;   9:  &lt;/span&gt;                              &lt;span class="str"&gt;'C3DAF9'&lt;/span&gt;,&lt;span class="lnum"&gt;  10:  &lt;/span&gt;                              1,&lt;span class="lnum"&gt;  11:  &lt;/span&gt;                              {&lt;span class="lnum"&gt;  12:  &lt;/span&gt;                                  duration: 2.0&lt;span class="lnum"&gt;  13:  &lt;/span&gt;                              }&lt;span class="lnum"&gt;  14:  &lt;/span&gt;                          ],&lt;span class="lnum"&gt;  15:  &lt;/span&gt;                    fxName: &lt;span class="str"&gt;'frame'&lt;/span&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;                },&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                closeVisible: &lt;span class="kwrd"&gt;true&lt;/span&gt;,&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                html: content,&lt;span class="lnum"&gt;  19:  &lt;/span&gt;                title: title + &lt;span class="str"&gt;'   '&lt;/span&gt; + &lt;span class="kwrd"&gt;new&lt;/span&gt; Date().format(&lt;span class="str"&gt;'g:i:s A'&lt;/span&gt;)&lt;span class="lnum"&gt;  20:  &lt;/span&gt;            });&lt;span class="lnum"&gt;  21:  &lt;/span&gt;        }&lt;/div&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201201/201201052234437456.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201201/201201052234449059.png" alt="image" width="244" height="73" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;3.弹出窗口&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="kwrd"&gt;function&lt;/span&gt; showMyWindow(url, id, title, isMaximized) {&lt;span class="lnum"&gt;   2:  &lt;/span&gt;            url += ((url.indexOf(&lt;span class="str"&gt;'?'&lt;/span&gt;) == -1 ? (&lt;span class="str"&gt;"?rand="&lt;/span&gt;) : (&lt;span class="str"&gt;"&amp;amp;rand="&lt;/span&gt;)) + Math.round(Math.random() * 10000));&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            &lt;span class="kwrd"&gt;var&lt;/span&gt; myWin = &lt;span class="kwrd"&gt;new&lt;/span&gt; Ext.Window({&lt;span class="lnum"&gt;   4:  &lt;/span&gt;                id: id,&lt;span class="lnum"&gt;   5:  &lt;/span&gt;                title: title,&lt;span class="lnum"&gt;   6:  &lt;/span&gt;                width: 572,&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                height: 290,&lt;span class="lnum"&gt;   8:  &lt;/span&gt;                iconCls: &lt;span class="str"&gt;"addicon"&lt;/span&gt;,&lt;span class="lnum"&gt;   9:  &lt;/span&gt;                resizable: &lt;span class="kwrd"&gt;false&lt;/span&gt;,&lt;span class="lnum"&gt;  10:  &lt;/span&gt;                draggable: &lt;span class="kwrd"&gt;true&lt;/span&gt;,&lt;span class="lnum"&gt;  11:  &lt;/span&gt;                defaultType: &lt;span class="str"&gt;"textfield"&lt;/span&gt;,&lt;span class="lnum"&gt;  12:  &lt;/span&gt;                labelWidth: 100,&lt;span class="lnum"&gt;  13:  &lt;/span&gt;                collapsible: &lt;span class="kwrd"&gt;false&lt;/span&gt;,&lt;span class="lnum"&gt;  14:  &lt;/span&gt;                closeAction: &lt;span class="str"&gt;'close'&lt;/span&gt;,&lt;span class="lnum"&gt;  15:  &lt;/span&gt;                closable: &lt;span class="kwrd"&gt;true&lt;/span&gt;,&lt;span class="lnum"&gt;  16:  &lt;/span&gt;                maximizable: &lt;span class="kwrd"&gt;true&lt;/span&gt;,&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                maximized: arguments.length == 4 ? isMaximized : &lt;span class="kwrd"&gt;false&lt;/span&gt;,&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                modal: &lt;span class="kwrd"&gt;true&lt;/span&gt;,&lt;span class="lnum"&gt;  19:  &lt;/span&gt;                buttonAlign: &lt;span class="str"&gt;"center"&lt;/span&gt;,&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                bodyStyle: &lt;span class="str"&gt;"padding:0 0 0 0"&lt;/span&gt;,&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                listeners: { &lt;span class="str"&gt;"beforedestroy"&lt;/span&gt;: &lt;span class="kwrd"&gt;function&lt;/span&gt; (obj) {&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;var&lt;/span&gt; tabs = top.tabs;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;typeof&lt;/span&gt; tabs != undefined &amp;amp;&amp;amp; tabs != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;if&lt;/span&gt; (top.tabs.items.getCount() &amp;gt; 1) {&lt;span class="lnum"&gt;  25:  &lt;/span&gt;                            &lt;span class="kwrd"&gt;var&lt;/span&gt; currentTab = tabs.getActiveTab();&lt;span class="lnum"&gt;  26:  &lt;/span&gt;                            tabs.remove(currentTab);&lt;span class="lnum"&gt;  27:  &lt;/span&gt;                        }&lt;span class="lnum"&gt;  28:  &lt;/span&gt;                    }&lt;span class="lnum"&gt;  29:  &lt;/span&gt;                    top.showMsg(&lt;span class="str"&gt;'温馨提示'&lt;/span&gt;, &lt;span class="str"&gt;'我已经关闭啦！'&lt;/span&gt;);&lt;span class="lnum"&gt;  30:  &lt;/span&gt;                }&lt;span class="lnum"&gt;  31:  &lt;/span&gt;                },&lt;span class="lnum"&gt;  32:  &lt;/span&gt;                html: &lt;span class="str"&gt;'&amp;lt;iframe style="margin-left:0px;margin-top:0px;border:0;'&lt;/span&gt; +&lt;span class="lnum"&gt;  33:  &lt;/span&gt;                  &lt;span class="str"&gt;'border-style:solid;border-color:red;" width="100%" height="100%" '&lt;/span&gt; +&lt;span class="lnum"&gt;  34:  &lt;/span&gt;                  &lt;span class="str"&gt;' id="frmWin'&lt;/span&gt; + id + &lt;span class="str"&gt;'" src="'&lt;/span&gt; + url + &lt;span class="str"&gt;'" name="'&lt;/span&gt; + id + &lt;span class="str"&gt;'" /&amp;gt;'&lt;/span&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;            });&lt;span class="lnum"&gt;  36:  &lt;/span&gt;            myWin.show();&lt;span class="lnum"&gt;  37:  &lt;/span&gt;        }&lt;/div&gt;&lt;p&gt;注意beforedestroy事件，这个事件可以在窗口关闭后通知你，有了这个通知事件，想干啥都方便了。在示例中，本人是显示消息。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;页面布局&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201201/201201052234449026.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201201/201201052234455895.png" alt="image" width="417" height="141" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;从图中可以看出分为上、中、左、右四块，前面介绍过了，就不细说了。&lt;/p&gt;&lt;p&gt;之所以使用Viewport，主要是为了自适应浏览器。值得注意的是，将一个页面分割几块，通常使用BorderLayout，其下有North、West、Center、East、South五个元素，其Collapsible属性指示是否隐藏面板，比如本示例的East面板。West这里放置左侧菜单，支持无限子集。为了有折叠面板的效果，需要设置Layout="AccordionLayout"。然后在后台动态添加TreePanel。&lt;/p&gt;&lt;p&gt;值得注意的是Center面板：&lt;/p&gt;                &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;Center &lt;/span&gt;&lt;span style="color: red;"&gt;MarginsSummary&lt;/span&gt;&lt;span style="color: blue;"&gt;="5 5 5 0"&amp;gt;&lt;br/&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;ext&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;TabPanel &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="tplCenter" &lt;/span&gt;&lt;span style="color: red;"&gt;IDMode&lt;/span&gt;&lt;span style="color: blue;"&gt;="Static" &lt;/span&gt;&lt;span style="color: red;"&gt;ResizeTabs&lt;/span&gt;&lt;span style="color: blue;"&gt;="true" &lt;/span&gt;&lt;span style="color: red;"&gt;Border&lt;/span&gt;&lt;span style="color: blue;"&gt;="true"&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: red;"&gt;MinTabWidth&lt;/span&gt;&lt;span style="color: blue;"&gt;="75" &lt;/span&gt;&lt;span style="color: red;"&gt;TabWidth&lt;/span&gt;&lt;span style="color: blue;"&gt;="135" &lt;/span&gt;&lt;span style="color: red;"&gt;EnableTabScroll&lt;/span&gt;&lt;span style="color: blue;"&gt;="true"&amp;gt;&lt;br/&gt;                        &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;Plugins&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;br/&gt;                            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;ext&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;TabScrollerMenu &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="TabScrollerMenu1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" /&amp;gt;&lt;br/&gt;                        &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;Plugins&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;br/&gt;                        &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;Items&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;br/&gt;                            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;ext&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Panel &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="Panel1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" &lt;/span&gt;&lt;span style="color: red;"&gt;TabMenuHidden&lt;/span&gt;&lt;span style="color: blue;"&gt;="true" &lt;/span&gt;&lt;span style="color: red;"&gt;Title&lt;/span&gt;&lt;span style="color: blue;"&gt;="工作台" &lt;/span&gt;&lt;span style="color: red;"&gt;TabTip&lt;/span&gt;&lt;span style="color: blue;"&gt;="工作台"&lt;br/&gt;                                &lt;/span&gt;&lt;span style="color: red;"&gt;Closable&lt;/span&gt;&lt;span style="color: blue;"&gt;="false"&amp;gt;&lt;br/&gt;                                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;AutoLoad &lt;/span&gt;&lt;span style="color: red;"&gt;Url&lt;/span&gt;&lt;span style="color: blue;"&gt;="/WorkbenchMain.aspx" &lt;/span&gt;&lt;span style="color: red;"&gt;Mode&lt;/span&gt;&lt;span style="color: blue;"&gt;="IFrame" &lt;/span&gt;&lt;span style="color: red;"&gt;TriggerEvent&lt;/span&gt;&lt;span style="color: blue;"&gt;="show" &lt;/span&gt;&lt;span style="color: red;"&gt;ShowMask&lt;/span&gt;&lt;span style="color: blue;"&gt;="true" /&amp;gt;&lt;br/&gt;                            &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;ext&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Panel&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;br/&gt;                        &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;Items&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;br/&gt;                    &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;ext&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;TabPanel&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;br/&gt;                &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;Center&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;br/&gt;&lt;/span&gt;&lt;p&gt;可以看出Center面板中放置了选项卡面板（TabPanel），主要到Plugins元素中的TabScrollerMenu控件，作用如图：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201201/201201052234467715.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201201/201201052234479077.png" alt="image" width="202" height="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;至于Panel，能让其自动加载框架页。&lt;span style="color: red;"&gt;TriggerEvent&lt;/span&gt;&lt;span style="color: blue;"&gt;="show" 表示显示的时候加载。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: blue;"&gt;可以看出，工作台那块都在&lt;span style="color: red;"&gt;Url&lt;/span&gt;&lt;span style="color: blue;"&gt;="/WorkbenchMain.aspx" 设置。注意/表示网站根目录，只有发布到IIS或者Web应用程序有效。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;工作台&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;工作台是非常重要的一块。&lt;/p&gt;&lt;p&gt;有时候为了显示重要信息，可能需要以不同颜色显示，那么注意下面的JS：&lt;/p&gt;&lt;span style="color: blue;"&gt;var &lt;/span&gt;template = &lt;span style="color: maroon;"&gt;'&amp;lt;b style="color:{1};"&amp;gt;{0}&amp;lt;/b&amp;gt;'&lt;/span&gt;;&lt;br/&gt;&lt;span style="color: blue;"&gt;var &lt;/span&gt;setTitle = &lt;span style="color: blue;"&gt;function &lt;/span&gt;(value, metadata, record, rowIndex, colIndex, store) {&lt;br/&gt;    &lt;span style="color: blue;"&gt;return &lt;/span&gt;String.format(template, value, &lt;span style="color: maroon;"&gt;'green'&lt;/span&gt;);&lt;br/&gt;};&lt;p&gt;在上面的代码中，你可以根据值来判断显示什么样的HTML，这里是粗体加绿。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201201/201201052234473189.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201201/201201052234487027.png" alt="image" width="244" height="88" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;自适应区域：&lt;/p&gt;&lt;span style="color: blue;"&gt;function &lt;/span&gt;autoSizeArea() {&lt;br/&gt;            &lt;span style="color: blue;"&gt;var &lt;/span&gt;vHeight = Viewport1.getHeight();&lt;br/&gt;            pnlView.setHeight(vHeight);&lt;br/&gt;            vHeight = vHeight - 150;&lt;br/&gt;            GridPanel1.setHeight(vHeight);&lt;br/&gt;            GridPanel3.setHeight(vHeight);&lt;br/&gt;            GridPanel2.setHeight(vHeight);&lt;br/&gt;            GridPanel6.setHeight(vHeight);&lt;br/&gt;            GridPanel5.setHeight(vHeight);&lt;br/&gt;        }&lt;p&gt;弹出窗体：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;span style="color: blue;"&gt;function &lt;/span&gt;showTestPage() {&lt;br/&gt;            top.showMyWindow(&lt;span style="color: maroon;"&gt;'/Test.aspx'&lt;/span&gt;, &lt;span style="color: maroon;"&gt;'frmStatesRequestList'&lt;/span&gt;, &lt;span style="color: maroon;"&gt;'测a试?页3'&lt;/span&gt;, &lt;span style="color: blue;"&gt;true&lt;/span&gt;);&lt;br/&gt;        }&lt;p&gt;这里显示的是我的测试页，你可以在这里显示自定义页面，并且可以传递工作台中面板中的Json数据。&lt;/p&gt;&lt;p&gt;在这里，我在工作台也添加了一个弹出窗口的JS函数，这么做的原因是，从这里打开窗口处理完事项，我可以刷新工作台的数据，甚至是指定的面板的数据，也就是在beforedestroy事件中，reload相应的store。&lt;/p&gt;&lt;p&gt;在工作台，本人写了一些处理的JS，大家可以根据自己需要更改，并且剪切到独立的JS文件中去。&lt;/p&gt;&lt;p&gt;比如这个函数：&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; showInput(animEl, recodes, TypeID, iconCs, msg, progressText, taskIDName, ObjectIdName, DriverIdName, TaskTitelName) {&lt;span class="lnum"&gt;   2:  &lt;/span&gt;            Ext.MessageBox.show({&lt;span class="lnum"&gt;   3:  &lt;/span&gt;                title: &lt;span class="str"&gt;'批注'&lt;/span&gt;,&lt;span class="lnum"&gt;   4:  &lt;/span&gt;                msg: &lt;span class="str"&gt;'请输入批注：'&lt;/span&gt;,&lt;span class="lnum"&gt;   5:  &lt;/span&gt;                width: 300,&lt;span class="lnum"&gt;   6:  &lt;/span&gt;                buttons: Ext.MessageBox.OKCANCEL,&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                multiline: &lt;span class="kwrd"&gt;true&lt;/span&gt;,&lt;span class="lnum"&gt;   8:  &lt;/span&gt;                fn: &lt;span class="kwrd"&gt;function&lt;/span&gt; (btn, text) {&lt;span class="lnum"&gt;   9:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;var&lt;/span&gt; remark = text.replace(/(^\s*)|(\s*$)/g, &lt;span class="str"&gt;''&lt;/span&gt;);&lt;span class="lnum"&gt;  10:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (TypeID == &lt;span class="str"&gt;'Reject'&lt;/span&gt; || TypeID == &lt;span class="str"&gt;'Repeal'&lt;/span&gt;) {&lt;span class="lnum"&gt;  11:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;var&lt;/span&gt; tip = &lt;span class="str"&gt;''&lt;/span&gt;;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;if&lt;/span&gt; (TypeID == &lt;span class="str"&gt;'Reject'&lt;/span&gt;)&lt;span class="lnum"&gt;  13:  &lt;/span&gt;                            tip = &lt;span class="str"&gt;'【退回】'&lt;/span&gt;;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;if&lt;/span&gt; (TypeID == &lt;span class="str"&gt;'Repeal'&lt;/span&gt;)&lt;span class="lnum"&gt;  15:  &lt;/span&gt;                            tip = &lt;span class="str"&gt;'【撤销】'&lt;/span&gt;;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;if&lt;/span&gt; (remark == &lt;span class="str"&gt;''&lt;/span&gt; &amp;amp;&amp;amp; btn == &lt;span class="str"&gt;'ok'&lt;/span&gt;) {&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                            showInput(animEl, recodes, TypeID, iconCs, msg, progressText, taskIDName, ObjectIdName, DriverIdName, TaskTitelName);&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                            alert(tip + &lt;span class="str"&gt;'必须填写批注，请填写。'&lt;/span&gt;);&lt;span class="lnum"&gt;  19:  &lt;/span&gt;                        }&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (btn == &lt;span class="str"&gt;'cancel'&lt;/span&gt;)&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                            Ext.MessageBox.alert(&lt;span class="str"&gt;'温馨提示'&lt;/span&gt;, &lt;span class="str"&gt;'操作已取消（'&lt;/span&gt; + tip + &lt;span class="str"&gt;'必须填写批注）。'&lt;/span&gt;);&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (remark != &lt;span class="str"&gt;''&lt;/span&gt; &amp;amp;&amp;amp; btn == &lt;span class="str"&gt;'ok'&lt;/span&gt;)&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                            Operations(animEl, recodes, TypeID, iconCs, msg, progressText, taskIDName, ObjectIdName, DriverIdName, TaskTitelName, remark);&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                    }&lt;span class="lnum"&gt;  25:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;else&lt;/span&gt; {&lt;span class="lnum"&gt;  26:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;if&lt;/span&gt; (btn == &lt;span class="str"&gt;'ok'&lt;/span&gt;)&lt;span class="lnum"&gt;  27:  &lt;/span&gt;                            Operations(animEl, recodes, TypeID, iconCs, msg, progressText, taskIDName, ObjectIdName, DriverIdName, TaskTitelName, remark);&lt;span class="lnum"&gt;  28:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;                            Ext.MessageBox.alert(&lt;span class="str"&gt;'温馨提示'&lt;/span&gt;, &lt;span class="str"&gt;'操作已取消。'&lt;/span&gt;);&lt;span class="lnum"&gt;  30:  &lt;/span&gt;                    }&lt;span class="lnum"&gt;  31:  &lt;/span&gt;                },&lt;span class="lnum"&gt;  32:  &lt;/span&gt;                animEl: animEl&lt;span class="lnum"&gt;  33:  &lt;/span&gt;            });&lt;span class="lnum"&gt;  34:  &lt;/span&gt;        }&lt;/div&gt;&lt;p&gt;用来判断相应的操作类型，假如是退回或者撤销，则必须填写批注。如：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201201/201201052234512727.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201201/201201052234528234.png" alt="image" width="244" height="196" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;至于其他的代码，我就不多介绍了，篇幅有限，精力有限。&lt;/p&gt;&lt;p&gt;工作台的代码，其他篇幅有部分介绍，可以参考&lt;a href="http://www.cnblogs.com/codelove/archive/2011/07/20/2111706.html" target="_blank"&gt;EXT.NET复杂布局（一）&amp;mdash;&amp;mdash;工作台&lt;/a&gt;。&lt;/p&gt;&lt;p&gt;处理面板顶部工具栏有不少按钮，如何动态添加这些按钮（可以根据用户权限和事项判断），代码如下：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        &lt;span class="rem"&gt;/// 向工具条添加按钮&lt;/span&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="icon"&amp;gt;图标&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="text"&amp;gt;文本&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="facode"&amp;gt;操作Code&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="toolbar"&amp;gt;工具条&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="_panelName"&amp;gt;容器ID&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetButton(Icon icon, &lt;span class="kwrd"&gt;string&lt;/span&gt; text, FACodeEnum facode, Toolbar toolbar, &lt;span class="kwrd"&gt;string&lt;/span&gt; _panelName)&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        {&lt;span class="lnum"&gt;  11:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (toolbar == &lt;span class="kwrd"&gt;null&lt;/span&gt;) &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ArgumentNullException(&lt;span class="str"&gt;"toolbar"&lt;/span&gt;);&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            var _btn = &lt;span class="kwrd"&gt;new&lt;/span&gt; Ext.Net.Button&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            {&lt;span class="lnum"&gt;  14:  &lt;/span&gt;                Icon = icon,&lt;span class="lnum"&gt;  15:  &lt;/span&gt;                Text = text,&lt;span class="lnum"&gt;  16:  &lt;/span&gt;                Listeners =&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                {&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                    Click =&lt;span class="lnum"&gt;  19:  &lt;/span&gt;                    {&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                        Handler =&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                            &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"toExcuteOperations(#{{{0}}}.getSelectionModel().getSelections(),'{1}');"&lt;/span&gt;, _panelName, facode.ToString())&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                    }&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                }&lt;span class="lnum"&gt;  24:  &lt;/span&gt;            };&lt;span class="lnum"&gt;  25:  &lt;/span&gt;            &lt;span class="rem"&gt;//设置Click事件的Handler，用于操作所选项。操作参数（所选记录集、操作Code）&lt;/span&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (toolbar.Items.Count &amp;gt; 0)&lt;span class="lnum"&gt;  27:  &lt;/span&gt;                toolbar.Items.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; ToolbarSeparator());&lt;span class="lnum"&gt;  28:  &lt;/span&gt;            toolbar.Items.Add(_btn);&lt;span class="lnum"&gt;  29:  &lt;/span&gt;        }&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;ToolbarSeparator表示分割线，比如：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201201/201201052234523533.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201201/201201052234529596.png" alt="image" width="168" height="26" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;在String.Format中，两个大括号代表一个大括号哦。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;表单&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;还记得那个测试页么，在工作台弹出窗口后，窗口加载的是框架页，那么在这个框架页中，我们如何关闭这个窗口呢？比如提交数据完毕的时候。其实只需要输出这段脚本即可：&lt;/strong&gt;&lt;/p&gt;top.Ext.getCmp(&lt;span style="color: maroon;"&gt;'frmStatesRequestList'&lt;/span&gt;).destroy();&lt;p&gt;&lt;strong&gt;在这个框架页中，我们也可以调用首页消息函数，比如：&lt;/strong&gt;&lt;/p&gt;top.showMsg(&lt;span style="color: maroon;"&gt;'温馨提示'&lt;/span&gt;, &lt;span style="color: maroon;"&gt;'欢迎进入该页面！'&lt;/span&gt;);&lt;p&gt;关于表单的一些介绍，请看&lt;a href="http://www.cnblogs.com/codelove/archive/2011/08/08/2131078.html" target="_blank"&gt;EXT.NET复杂布局（三）&amp;mdash;&amp;mdash;复杂表单布局&lt;/a&gt;。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;尾声&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;从使用EXT.NET到现在，也差不多一年了，真正使用的时间也只有几个月而已。现在回想起来，还是感慨良多。&lt;/p&gt;&lt;p&gt;回想当初上手的时候，不仅ext不熟悉，而且对EXT.NET也一无所知，中间碰到过许多问题，但是挺过来了，而且还留下了自己的足迹。希望我的帖子能够帮助各位更快的掌握EXT以及EXT.NET，也希望能为EXT.NET的资料库添加块砖片瓦。&lt;/p&gt;&lt;p&gt;最后，附上&lt;strong&gt;&lt;a title="源码（点击下载）" href="http://files.cnblogs.com/codelove/EXT.NET.DEMO.7z" target="_blank"&gt;源码&lt;/a&gt;&lt;/strong&gt;。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/codelove/aggbug/2313765.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/codelove/archive/2012/01/05/2313765.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/codelove/archive/2011/12/30/2308125.html</id><title type="text">EXT.NET复杂布局（四）——系统首页设计（上）</title><summary type="text">很久没有发帖了，很是惭愧，因此给各位使用EXT.NET的朋友献上一份礼物。本篇主要讲述页面设计与效果，下篇将讲述编码并提供源码下载。系统首页设计往往是个难点，因为往往要考虑以下因素：重要通知系统功能菜单快捷操作日常维护工作（比如待办事项、已办事项等等）用户信息（比如公司、部门、组织机构）系统信息（意见反馈、帮助等）联系沟通等等又要兼顾美观得体（丑了客户不愿意用，更别说钱了），方便实用，怎么从有限的空间里显示更多的功能（阵地战），往往弄得抓耳搔头，大费脑细胞。下面就给出我的方案。页面效果我申明下，我不是专业的前端工程师，我就是一打杂的（啥都搞下），所以不要期望过高，如果还过得去，请点推荐。不多说</summary><published>2011-12-30T15:26:00Z</published><updated>2011-12-30T15:26:00Z</updated><author><name>雪雁</name><uri>http://www.cnblogs.com/codelove/</uri></author><link rel="alternate" href="http://www.cnblogs.com/codelove/archive/2011/12/30/2308125.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/codelove/archive/2011/12/30/2308125.html"/><content type="html">&lt;p&gt;很久没有发帖了，很是惭愧，因此给各位使用EXT.NET的朋友献上一份礼物。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;本篇主要讲述页面设计与效果，下篇将讲述编码并提供源码下载。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;系统首页设计往往是个难点，因为往往要考虑以下因素：&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;重要通知&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;系统功能菜单&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;快捷操作&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;日常维护工作（比如待办事项、已办事项等等）&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;用户信息（比如公司、部门、组织机构）&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;系统信息（意见反馈、帮助等）&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;联系沟通&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;等等&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;又要兼顾美观得体（丑了客户不愿意用，更别说钱了），方便实用，怎么从有限的空间里显示更多的功能（阵地战），往往弄得抓耳搔头，大费脑细胞。下面就给出我的方案。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;页面效果&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;我申明下，我不是专业的前端工程师，我就是一打杂的（啥都搞下），所以不要期望过高，如果还过得去，请点推荐。&lt;/strong&gt;不多说了，上图：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201112/201112302325524702.png"&gt;&lt;img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201112/201112302325547866.png" alt="image" width="644" height="308" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201112/201112302325547932.jpg"&gt;&lt;img style="display: inline; border: 0px;" title="111" src="http://images.cnblogs.com/cnblogs_com/codelove/201112/201112302325571228.jpg" alt="111" width="644" height="310" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;从图中可以看出，首页分4块区域（四大板块）：&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;顶部面板&amp;mdash;&amp;mdash;LOGO、用户信息、帮助、反馈、通知等。&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;左侧面板&amp;mdash;&amp;mdash;组织机构（通常放功能菜单）。&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;右侧面板&amp;mdash;&amp;mdash;联系人或其他信息。&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;中央区域&amp;mdash;&amp;mdash;工作台。主要用于日常工作维护以及快捷操作。&lt;/strong&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;顶部面包和右侧面板没啥好说的。接下来就说说功能吧。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;左侧面板&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;左侧面板其实是相当重要的一块，在平常系统设计中，往往把功能菜单放在左侧。这里类似。不仅支持分组折叠，还支持无限极子菜单，美观而灵活。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201112/201112302325579657.png"&gt;&lt;img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201112/201112302325588328.png" alt="image" width="180" height="484" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;当点击子节点，会显示在Tab页中。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201112/201112302326015070.png"&gt;&lt;img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201112/201112302326014547.png" alt="image" width="644" height="281" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;这样，用户可以方便的实现操作。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;中央区域&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;中央区域主要用于日常工作维护以及快捷操作。当然快捷操作你也可以放在顶部面板。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201112/201112302326029248.png"&gt;&lt;img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201112/201112302326054038.png" alt="image" width="644" height="315" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;这个面板主要包括待处理事务、一般事务、通知、部门讨论区、部门文档等内容，当然我这是举例。&lt;/p&gt;&lt;p&gt;整个工作台布局也是采用折叠面板，不过&lt;strong&gt;当展开某个面板时，会刷新数据。默认加载，并不需要加载所有数据。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;就拿待处理事务来说：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201112/201112302326055466.png"&gt;&lt;img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201112/20111230232605483.png" alt="image" width="644" height="214" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;通过工具栏按钮，可以方便对事务进行操作（&lt;strong&gt;别忘了判断权限&lt;/strong&gt;）。如点击退回操作：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201112/201112302326057136.png"&gt;&lt;img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201112/201112302326053024.png" alt="image" width="644" height="297" border="0" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;通过数据行中的操作列按钮，&lt;strong&gt;可以方便查看表单内容，当表单关闭时，刷新工作台。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;总之，只会显示一个操作面板。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201112/201112302326068041.png"&gt;&lt;img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201112/201112302326066711.png" alt="image" width="644" height="273" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;最后&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;整个页面是自适应的，会随着浏览窗口大小自适应，如：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201112/20111230232608224.png"&gt;&lt;img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201112/201112302326095929.png" alt="image" width="644" height="323" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;点子页面弹出表单可以最大化，如：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201112/20111230232610422.png"&gt;&lt;img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201112/201112302326137720.png" alt="image" width="644" height="312" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;当你点击表单里面的提交按钮（假设存在），提交完后，可以关闭表单，父页面也可以触发操作，如关闭弹出的表单时：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201112/201112302326131898.png"&gt;&lt;img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201112/201112302326146947.png" alt="image" width="644" height="309" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;先写到这里吧，下篇再细谈。到时奉上DEMO。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;由于加群的人太多，EXT.NET群已满。由于现在是业余弄弄EXT.NET，所以本人也不会过多与大家交流EXT.NET，还写一篇，作为结尾好了。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;这几天有空的话，尽量完善这个DEMO吧。&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/codelove/aggbug/2308125.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/codelove/archive/2011/12/30/2308125.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/codelove/archive/2011/12/10/2282984.html</id><title type="text">使用MONO在MAC OS上开发——同步日志（二）</title><summary type="text">上一篇使用MONO在MAC OS上开发——同步日志（一）讲述了在MAC OS读取配置文件以及写日志，那么只算是完成了基本的配置，下面的才是重点。由于时间关系，就简单描述下，并不具体分析源码。最后奉上源码。一：安装第一步，安装MONO框架。你可以在MONO官网去下载。注意“MonoFramework-MRE-2.10.5_0.macos10.xamarin.x86.dmg”在低版本MAC OS上运行有问题。建议安装“MonoFramework-MRE-2.10.4_0.macos10.xamarin.x86.dmg”文件。第二步，执行程序。将可执行程序“MonitoringApp”复制到电脑桌面</summary><published>2011-12-09T16:44:00Z</published><updated>2011-12-09T16:44:00Z</updated><author><name>雪雁</name><uri>http://www.cnblogs.com/codelove/</uri></author><link rel="alternate" href="http://www.cnblogs.com/codelove/archive/2011/12/10/2282984.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/codelove/archive/2011/12/10/2282984.html"/><content type="html">&lt;p&gt;上一篇&lt;a href="http://www.cnblogs.com/codelove/archive/2011/09/26/2192366.html"&gt;使用MONO在MAC OS上开发&amp;mdash;&amp;mdash;同步日志（一）&lt;/a&gt;讲述了在MAC OS读取配置文件以及写日志，那么只算是完成了基本的配置，下面的才是重点。&lt;/p&gt;&lt;p&gt;由于时间关系，就简单描述下，并不具体分析源码。最后奉上源码。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;一：安装&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;第一步，安装MONO框架。你可以在MONO官网去下载。注意&amp;ldquo;MonoFramework-MRE-2.10.5_0.macos10.xamarin.x86.dmg&amp;rdquo;在低版本MAC OS上运行有问题。建议安装&amp;ldquo;MonoFramework-MRE-2.10.4_0.macos10.xamarin.x86.dmg&amp;rdquo;文件。&lt;/p&gt;&lt;p&gt;第二步，执行程序。将可执行程序&amp;ldquo;MonitoringApp&amp;rdquo;复制到电脑桌面，双击运行。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;注：在MONO提供的开发工具（MonoDevelop）中，编译后会生成&amp;ldquo;MonitoringApp&amp;rdquo;脚本。用记事本打开，就会发现如下代码：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;#!/bin/sh &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;exec mono "/Users/PRODUCTION/Desktop/App/lib/MonitoringApp/MonitoringApp.exe" "$@"&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;通过这段AppleScript，就明白了利用MONO在Mac OS上执行.NET程序的原理了，还包装了一层壳，一层你蜕不掉的壳&amp;mdash;&amp;mdash;通过在终端上运行的AppleScript来启动MONO虚拟机，然后运行MonitoringApp.exe。这段AppleScript是通过终端运行的，带来了以下麻烦：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;1）写死的路径。比如我将MonitoringApp文件移动位置，就不能运行了，因为这段脚本中，路径是死的。当然你可以去学习AppleScript，然后去搜MonitoringApp.exe文件，然后执行。但是对于只有3天时间的我，显然是不可能的。&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;2）无法脱离终端运行。但是AppleScript启动的程序无法脱离终端运行。打个比方，你将终端关了，OK，你的程序也关了。这问题当时我一直没解决，现在想解决，却没苹果电脑测试了。&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;二：环境配置&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;第一步，配置配置文件。配置文件名字必须是&amp;ldquo;Configuration.txt&amp;rdquo;。本目录提供了一个参考文件。具体参数说明如下： &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MonitoringDirectoryType：目录类型，仅支持两个值（Immediate、Cycle）。Immediate表示即时监控（默认值），Cycle表示周期监控。&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Path：监控目录路径。必须是存在的路径。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TargetPath：目标目录路径。可以是远程目录路径。不能使用SMB路径，而应该是用如&amp;ldquo;/Volumes/mes_data/n81a&amp;rdquo;的类型。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IncludeSubdirectories：是否涵盖子目录。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Filter：过滤字符串。如&amp;ldquo;*&amp;rdquo;表示监控所有文件，&amp;ldquo;*.txt&amp;rdquo;表示监控所有的文本文件。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BackupPath：备份路径。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BackupExpired：备份过期时间。单位是天。必须为整数。默认值30天。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CycleMinutes：周期循环时间。单位是分。 必须为整数。默认值60分钟。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 注意事项： &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1）8个配置缺一不可。必须全部配置，并写值。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2）支持多个目录。但是要求所有的值都以多个的形式表示，如&amp;ldquo;['Immediate','Cycle']&amp;rdquo;表示两个目录，相应的其他配置项也必须写两个值。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3）所有的符号必须为英文符号。值必须用单引号括起来。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4）有些值只对某种类型起作用，比如CycleMinutes只对MonitoringDirectoryType为Cycle的类型目录起作用，因此当目录类型为Immediate时，值属于无效状态。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5）配置名以冒号结束。配置值涵盖在中括号中。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6）每个配置项配置完成前，请不要换行。每个配置项之间请换行。程序是按行读取配置项的。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7）配置名和配置值不区分大小写。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 配置完配置文件后，请将文件复制到系统用户的根目录下。如&amp;ldquo;/Users/nzocnzoc&amp;rdquo;。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;注：其实上面的都是屁话，具体的你还是自己看代码吧。值得注意的是，最好你所有的文字都用英文，否则复制过去可能都是乱码，即使设置了语言为中文也不行。&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;第二步，配置开机启动。请先将程序拖入对应用户的登陆项里。具体设置在：【系统偏好设置（System Preferences）】-&amp;gt;【用户账户（Accounts）】-&amp;gt;【登陆项（Login Items）】。然后再连接远程服务器。具体配置在【前往】-&amp;gt;【连接服务器】中配置，请使用记住密码（切记）。配置完毕，然后将目标目录拖入至目标用户的登陆项中，如此，就能在开机启动时自动连接远程目录。 &lt;br /&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 注意：由于网线连接或者WIFI连接相对缓慢，在登陆项中，请将远程目录的位置尽量移后，以便有充足的时间来缓冲。没办法，这是个比较蛋疼的办法，但是总归是实现了开机启动而且连上了远程目录。 &lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;第三步：重启电脑，测试是否成功。一定要测试是否文件能够上传到远程目录。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;三：问题诊断。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;如果文件没有成功上传，程序又没有提供异常提示，请先参考&amp;ldquo;/Users/当前用户&amp;rdquo;路径下的Data目录中的错误日志。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;/p&gt;&lt;p&gt;------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;/p&gt;&lt;p&gt;其实这个项目代码倒是很简单，1天不到就可以写完，但是移植到Mac OS上问题就来了。很多时候，我们都说MONO可以跨平台，事实上也是可以的，但是问题却很多。&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;代码必须全部用英文，包括注释，否则移植可能会出乱码。&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;需要在Mac OS上使用MonoDevelop（MONO的开发工具）编译生成。&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Mac的文件系统与Window系统很不一样，使用.NET代码获取路径时，比如程序启动路径等均无法获取。&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;MONO for Mac OS不支持控制台应用程序，画Window应用程序界面最好用Gtk#画，否则可能界面显示可能会有问题。如需隐藏界面，最好将宽度和高度设置为0，设置属性和方法均无效，不知道下个版本会不会修复。&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;注意MONO框架版本问题。有可能最新版本不支持某些代码或者不支持某些低版本苹果系统。&lt;/strong&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;笔者在这里权当是抛砖引玉，如果有朋友也使用过MONO for Mac OS，希望能分享下经验。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/codelove/MonitoringApp.7z"&gt;源码下载：MonitoringApp.7z&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: #1977b0; font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/codelove/aggbug/2282984.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/codelove/archive/2011/12/10/2282984.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/codelove/archive/2011/12/01/2271339.html</id><title type="text">程序员之歌</title><summary type="text">程呀嘛程序员，背着那电脑去加班，不怕太阳晒，也不怕风雨狂，只怕领导骂我蠢啊，没有技术喽，无颜见爹娘。程呀嘛程序员，背着那电脑去加班，不是为做官，也不是为面子狂，只为穷人要翻身哪，不被压成干嘿，不做码农了。------------------------------------------------------------------------------------------------------------------------------------------很久没写博客了，有很多内容要写，但总不想写，过段时间闲了再写写吧。这几天偶有所感，谨以此歌献给所有的程序员。。。</summary><published>2011-12-01T15:40:00Z</published><updated>2011-12-01T15:40:00Z</updated><author><name>雪雁</name><uri>http://www.cnblogs.com/codelove/</uri></author><link rel="alternate" href="http://www.cnblogs.com/codelove/archive/2011/12/01/2271339.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/codelove/archive/2011/12/01/2271339.html"/><content type="html">&lt;p&gt;&lt;strong&gt;程呀嘛程序员，&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;背着那电脑去加班，&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;不怕太阳晒，&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;也不怕风雨狂，&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;只怕领导骂我蠢啊，&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;没有技术喽，&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;无颜见爹娘。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;程呀嘛程序员，&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;背着那电脑去加班，&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;不是为做官，&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;也不是为面子狂，&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;只为穷人要翻身哪，&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;不被压成干嘿，&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;不做码农了。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;------------------------------------------------------------------------------------------------------------------------------------------&lt;/p&gt;&lt;p&gt;很久没写博客了，有很多内容要写，但总不想写，过段时间闲了再写写吧。这几天偶有所感，谨以此歌献给所有的程序员。。。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/codelove/aggbug/2271339.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/codelove/archive/2011/12/01/2271339.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/codelove/archive/2011/09/26/2192366.html</id><title type="text">使用MONO在MAC OS上开发——同步日志（一）</title><summary type="text">原先打算再写点EXT.NET方面的，由于现在在玩Silverlight和Android，所以不打算写下去了。而且最近很忙，所以发帖也不会很及时。 好了，转入正题了：最近客户有个需求，要求写个小程序监控生产线上的苹果一体机的日志文件并上传到服务器。开始想使用Perl或者Python，但是时间不够（因为对这两门语言还不太熟悉），于是想试试MONO。MONO虽然没想象中好用，但是还算勉强能用。 虽然MonoDevelop还可以，但是还是比较喜欢使用VS开发。于是在VS里面先编码。值得注意的是：如果是开发Winform程序，界面用GTK重画吧。如果是在VS里面开发，最好将所有的编码和注释都用英文。否.</summary><published>2011-09-26T14:51:00Z</published><updated>2011-09-26T14:51:00Z</updated><author><name>雪雁</name><uri>http://www.cnblogs.com/codelove/</uri></author><link rel="alternate" href="http://www.cnblogs.com/codelove/archive/2011/09/26/2192366.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/codelove/archive/2011/09/26/2192366.html"/><content type="html">&lt;p&gt;&amp;nbsp; 原先打算再写点EXT.NET方面的，由于现在在玩Silverlight和Android，所以不打算写下去了。而且最近很忙，所以发帖也不会很及时。&lt;/p&gt;&lt;p&gt;&amp;nbsp; 好了，转入正题了：最近客户有个需求，要求写个小程序监控生产线上的苹果一体机的日志文件并上传到服务器。开始想使用Perl或者Python，但是时间不够（因为对这两门语言还不太熟悉），于是想试试MONO。MONO虽然没想象中好用，但是还算勉强能用。&lt;/p&gt;&lt;p&gt;&amp;nbsp; 虽然MonoDevelop还可以，但是还是比较喜欢使用VS开发。于是在VS里面先编码。值得注意的是：&lt;/p&gt;&lt;ol&gt;&lt;li&gt;如果是开发Winform程序，界面用GTK重画吧。&lt;/li&gt;&lt;li&gt;如果是在VS里面开发，最好将所有的编码和注释都用英文。否则换其他系统时，可能会出现乱码。&lt;/li&gt;&lt;li&gt;编写时需注意MONO是否支持，否则就是白写。&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;接下来，开始编码。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1.读取配置文件&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; 习惯用XML，发现不支持System.Xml.Linq，亦不支持System.Xml，读取ini文件也麻烦，于是干脆读取文本文件好了。示例配置如下：&lt;/p&gt;MonitoringDirectoryType:['Immediate','Cycle']&lt;br/&gt;&lt;br/&gt;Path:['/Users/PRODUCTION/Public/FinalTest/LogsFolder','/Users/PRODUCTION/Public/FinalTest/LogsFolder']&lt;br/&gt;&lt;br/&gt;TargetPath:['/Volumes/mes_data/FINALTEST/n81a/{Y}/{M}/{D}/FIN012','/Volumes/mes_data/FINALTEST/n81a/{Y}/{M}/{D}/FIN012']&lt;br/&gt;&lt;br/&gt;IncludeSubdirectories:['FALSE','false']&lt;br/&gt;&lt;br/&gt;Filter:['*.TXT','*.CSV']&lt;br/&gt;&lt;br/&gt;BackupPath:['/Users/PRODUCTION/BACKUP/{Y}/{M}/{D}','/Users/PRODUCTION/BACKUP/{Y}/{M}/{D}']&lt;br/&gt;&lt;br/&gt;BackupExpired:['2','2']&lt;br/&gt;&lt;br/&gt;CycleMinutes:['','1440']&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;span face="微软雅黑" style="font-family: 微软雅黑;"&gt;相关解析代码如下：&lt;/span&gt;&lt;/p&gt;using System;&lt;br/&gt;using System.Collections.Generic;&lt;br/&gt;using System.Linq;&lt;br/&gt;using System.Text;&lt;br/&gt;using System.IO;&lt;br/&gt;using MonitoringApp.Custom;&lt;br/&gt;using System.Text.RegularExpressions;&lt;br/&gt;using Gtk;&lt;br/&gt;namespace MonitoringApp.Code.App&lt;br/&gt;{&lt;br/&gt;    public class Configuration&lt;br/&gt;    {&lt;br/&gt;&lt;br/&gt;        private static bool isLoadFirst = false;&lt;br/&gt;        private static List&amp;lt;MyConfig&amp;gt; configLst;&lt;br/&gt;        public static List&amp;lt;MyConfig&amp;gt; ConfigLst&lt;br/&gt;        {&lt;br/&gt;            get&lt;br/&gt;            {&lt;br/&gt;                if (configLst == null)&lt;br/&gt;                {&lt;br/&gt;                    try&lt;br/&gt;                    {&lt;br/&gt;                        if (!isLoadFirst)&lt;br/&gt;                            return LoadFromInitParams();&lt;br/&gt;                        else&lt;br/&gt;                            return null;&lt;br/&gt;                    }&lt;br/&gt;                    catch (Exception ex)&lt;br/&gt;                    {&lt;br/&gt;                            LogManager.WriteErrorLog(ex);&lt;br/&gt;&lt;br/&gt;                        return null;&lt;br/&gt;                    }&lt;br/&gt;                }&lt;br/&gt;                return configLst;&lt;br/&gt;            }&lt;br/&gt;            set { configLst = value; }&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// Load Configuration file&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br/&gt;        private static List&amp;lt;MyConfig&amp;gt; LoadFromInitParams()&lt;br/&gt;        {&lt;br/&gt;            isLoadFirst = true;&lt;br/&gt;            string _configPath = Path.Combine(Directory.GetCurrentDirectory(), "Configuration.txt");&lt;br/&gt;            if (File.Exists(_configPath))&lt;br/&gt;            {&lt;br/&gt;                if (ConfigLst == null)&lt;br/&gt;                    ConfigLst = new List&amp;lt;MyConfig&amp;gt;();&lt;br/&gt;                else&lt;br/&gt;                    return ConfigLst;&lt;br/&gt;                using (StreamReader sr = new StreamReader(_configPath))&lt;br/&gt;                {&lt;br/&gt;                    int lineIndex = 1;&lt;br/&gt;                    while (sr.Peek() &amp;gt; 0)&lt;br/&gt;                    {&lt;br/&gt;                        string str = sr.ReadLine().Trim();&lt;br/&gt;                        if (str.Length == 0)&lt;br/&gt;                            continue;&lt;br/&gt;                        if (!str.Contains("[") || !str.Contains("]"))&lt;br/&gt;                        {&lt;br/&gt;                            LogManager.WriteErrorLog(string.Format("Config Error:'[' OR ']' Not Exist.At Line {0}.", lineIndex));&lt;br/&gt;                            continue;&lt;br/&gt;                        }&lt;br/&gt;                        if (!str.Contains(":"))&lt;br/&gt;                        {&lt;br/&gt;                            LogManager.WriteErrorLog(string.Format("Config Error:':' Not Exist.At Line {0}.", lineIndex));&lt;br/&gt;                            continue;&lt;br/&gt;                        }&lt;br/&gt;                        string[] names = str.Split(':');&lt;br/&gt;                        str = str.Substring(str.IndexOf(':') + 1).Trim(']').Trim('[').Trim('\'');&lt;br/&gt;                        string[] strConfigs = str.Split(',');&lt;br/&gt;                        SetConfig(names, ConfigLst, strConfigs, lineIndex == 1);&lt;br/&gt;                        lineIndex++;&lt;br/&gt;                    }&lt;br/&gt;                }&lt;br/&gt;                return ConfigLst;&lt;br/&gt;            }&lt;br/&gt;            else&lt;br/&gt;            {&lt;br/&gt;                LogManager.WriteErrorLog(string.Format("can't find config file.Path:{0}.",_configPath));&lt;br/&gt;                return null;&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// Set Config&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="name"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="lst"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="strConfigs"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        private static void SetConfig(string[] name, List&amp;lt;MyConfig&amp;gt; lst, string[] strConfigs, bool isLineOne)&lt;br/&gt;        {&lt;br/&gt;            try&lt;br/&gt;            {&lt;br/&gt;                var mcConfig = (MonitoringConfigurations)Enum.Parse(typeof(MonitoringConfigurations), name[0], true);&lt;br/&gt;                //Set Values&lt;br/&gt;                for (int i = 0; i &amp;lt; strConfigs.Length; i++)&lt;br/&gt;                {&lt;br/&gt;                    string value = strConfigs[i].Trim('\'');&lt;br/&gt;                    switch (mcConfig)&lt;br/&gt;                    {&lt;br/&gt;                        case MonitoringConfigurations.MonitoringDirectoryType:&lt;br/&gt;                            {&lt;br/&gt;                                #region MonitoringDirectoryType Defalut:immediate&lt;br/&gt;                                switch (value.ToLower())&lt;br/&gt;                                {&lt;br/&gt;                                    case "immediate":&lt;br/&gt;                                        {&lt;br/&gt;                                            if (isLineOne)&lt;br/&gt;                                            {&lt;br/&gt;                                                MyConfig myConfig = new MyConfig();&lt;br/&gt;                                                myConfig.MDType = MonitoringDirectoryType.Immediate;&lt;br/&gt;                                                lst.Add(myConfig);&lt;br/&gt;                                            }&lt;br/&gt;                                            else&lt;br/&gt;                                            {&lt;br/&gt;                                                lst[i].MDType = MonitoringDirectoryType.Immediate;&lt;br/&gt;                                            }&lt;br/&gt;                                            break;&lt;br/&gt;                                        }&lt;br/&gt;                                    case "cycle":&lt;br/&gt;                                        {&lt;br/&gt;                                            if (isLineOne)&lt;br/&gt;                                            {&lt;br/&gt;                                                MyConfig myConfig = new MyConfig();&lt;br/&gt;                                                myConfig.MDType = MonitoringDirectoryType.Cycle;&lt;br/&gt;                                                lst.Add(myConfig);&lt;br/&gt;                                            }&lt;br/&gt;                                            else&lt;br/&gt;                                            {&lt;br/&gt;                                                lst[i].MDType = MonitoringDirectoryType.Cycle;&lt;br/&gt;                                            }&lt;br/&gt;                                            break;&lt;br/&gt;                                        }&lt;br/&gt;                                    default:&lt;br/&gt;                                        {&lt;br/&gt;                                            if (isLineOne)&lt;br/&gt;                                            {&lt;br/&gt;                                                MyConfig myConfig = new MyConfig();&lt;br/&gt;                                                myConfig.MDType = MonitoringDirectoryType.Immediate;&lt;br/&gt;                                                lst.Add(myConfig);&lt;br/&gt;                                            }&lt;br/&gt;                                            else&lt;br/&gt;                                            {&lt;br/&gt;                                                lst[i].MDType = MonitoringDirectoryType.Immediate;&lt;br/&gt;                                            }&lt;br/&gt;                                            break;&lt;br/&gt;                                        }&lt;br/&gt;                                }&lt;br/&gt;                                #endregion&lt;br/&gt;                                break;&lt;br/&gt;                            }&lt;br/&gt;                        case MonitoringConfigurations.Path:&lt;br/&gt;                            #region Path&lt;br/&gt;                            if (isLineOne)&lt;br/&gt;                            {&lt;br/&gt;                                MyConfig myConfig = new MyConfig();&lt;br/&gt;                                myConfig.Path = value;&lt;br/&gt;                                lst.Add(myConfig);&lt;br/&gt;                            }&lt;br/&gt;                            else&lt;br/&gt;                            {&lt;br/&gt;                                lst[i].Path = value;&lt;br/&gt;                            }&lt;br/&gt;                            #endregion&lt;br/&gt;                            break;&lt;br/&gt;                        case MonitoringConfigurations.IncludeSubdirectories:&lt;br/&gt;                            #region IncludeSubdirectories&lt;br/&gt;                            if (isLineOne)&lt;br/&gt;                            {&lt;br/&gt;                                MyConfig myConfig = new MyConfig();&lt;br/&gt;                                myConfig.IncludeSubdirectories = Convert.ToBoolean(value);&lt;br/&gt;                                lst.Add(myConfig);&lt;br/&gt;                            }&lt;br/&gt;                            else&lt;br/&gt;                            {&lt;br/&gt;                                lst[i].IncludeSubdirectories = Convert.ToBoolean(value);&lt;br/&gt;                            }&lt;br/&gt;                            #endregion&lt;br/&gt;                            break;&lt;br/&gt;                        case MonitoringConfigurations.Filter:&lt;br/&gt;                            #region Filter&lt;br/&gt;                            if (isLineOne)&lt;br/&gt;                            {&lt;br/&gt;                                MyConfig myConfig = new MyConfig();&lt;br/&gt;                                myConfig.Filter = value;&lt;br/&gt;                                lst.Add(myConfig);&lt;br/&gt;                            }&lt;br/&gt;                            else&lt;br/&gt;                            {&lt;br/&gt;                                lst[i].Filter = value;&lt;br/&gt;                            }&lt;br/&gt;                            break;&lt;br/&gt;                            #endregion&lt;br/&gt;                        case MonitoringConfigurations.BackupPath:&lt;br/&gt;                            #region BackupPath&lt;br/&gt;                            if (isLineOne)&lt;br/&gt;                            {&lt;br/&gt;                                MyConfig myConfig = new MyConfig();&lt;br/&gt;                                myConfig.BackupPath = value;&lt;br/&gt;                                lst.Add(myConfig);&lt;br/&gt;                            }&lt;br/&gt;                            else&lt;br/&gt;                            {&lt;br/&gt;                                lst[i].BackupPath = value;&lt;br/&gt;                            }&lt;br/&gt;                            #endregion&lt;br/&gt;                            break;&lt;br/&gt;                        case MonitoringConfigurations.TargetPath:&lt;br/&gt;                            #region TargetPath&lt;br/&gt;                            if (isLineOne)&lt;br/&gt;                            {&lt;br/&gt;                                MyConfig myConfig = new MyConfig();&lt;br/&gt;                                myConfig.TargetPath = value;&lt;br/&gt;                                lst.Add(myConfig);&lt;br/&gt;                            }&lt;br/&gt;                            else&lt;br/&gt;                            {&lt;br/&gt;                                lst[i].TargetPath = value;&lt;br/&gt;                            }&lt;br/&gt;                            #endregion&lt;br/&gt;                            break;&lt;br/&gt;                        case MonitoringConfigurations.BackupExpired:&lt;br/&gt;                            #region BackupExpired  Unit:days  Default:30&lt;br/&gt;                            if (isLineOne)&lt;br/&gt;                            {&lt;br/&gt;                                MyConfig myConfig = new MyConfig();&lt;br/&gt;                                myConfig.BackupExpired = Convert.ToInt32(value.Length == 0 ? "30" : value);&lt;br/&gt;                                lst.Add(myConfig);&lt;br/&gt;                            }&lt;br/&gt;                            else&lt;br/&gt;                            {&lt;br/&gt;                                lst[i].BackupExpired = Convert.ToInt32(value.Length == 0 ? "30" : value);&lt;br/&gt;                            }&lt;br/&gt;                            #endregion&lt;br/&gt;                            break;&lt;br/&gt;                        case MonitoringConfigurations.CycleMinutes:&lt;br/&gt;                            #region CycleMinutes  Unit:Minute  Default:60&lt;br/&gt;                            if (isLineOne)&lt;br/&gt;                            {&lt;br/&gt;                                MyConfig myConfig = new MyConfig();&lt;br/&gt;                                myConfig.CycleMinutes = Convert.ToInt32(value.Length == 0 ? "60" : value);&lt;br/&gt;                                lst.Add(myConfig);&lt;br/&gt;                            }&lt;br/&gt;                            else&lt;br/&gt;                            {&lt;br/&gt;                                lst[i].CycleMinutes = Convert.ToInt32(value.Length == 0 ? "60" : value);&lt;br/&gt;                            }&lt;br/&gt;                            #endregion&lt;br/&gt;                            break;&lt;br/&gt;                        default:&lt;br/&gt;                            break;&lt;br/&gt;                    }&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;            catch (Exception ex)&lt;br/&gt;            {&lt;br/&gt;                LogManager.WriteErrorLog(ex);&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;    }&lt;br/&gt;}&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;值得注意的是：&lt;/p&gt;&lt;ol&gt;&lt;li&gt;这里是按行读取的。从读取配置来看，可以看出，是支持多个配置项的。&lt;/li&gt;&lt;li&gt;如果出错，会记录日志。&lt;/li&gt;&lt;li&gt;和客户讲解如何配置是一件麻烦的事情。相关配置解释如下：&lt;/li&gt;&lt;/ol&gt;MonitoringDirectoryType：目录类型，仅支持两个值（Immediate、Cycle）。Immediate表示即时监控（默认值），Cycle表示周期监控。&lt;br/&gt;Path：监控目录路径。必须是存在的路径。&lt;br/&gt;TargetPath：目标目录路径。可以是远程目录路径。不能使用SMB路径，而应该是用如&amp;ldquo;/Volumes/mes_data/n81a&amp;rdquo;的类型。&lt;br/&gt;IncludeSubdirectories：是否涵盖子目录。&lt;br/&gt;Filter：过滤字符串。如&amp;ldquo;*&amp;rdquo;表示监控所有文件，&amp;ldquo;*.txt&amp;rdquo;表示监控所有的文本文件。&lt;br/&gt;BackupPath：备份路径。&lt;br/&gt;BackupExpired：备份过期时间。单位是天。必须为整数。默认值30天。&lt;br/&gt;CycleMinutes：周期循环时间。单位是分。 必须为整数。默认值60分钟。&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;然后针对配置写个说明文档，这样客户就会配置了。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2）记录日志&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;程序运行起来总不可避免的会遇到各种问题，记录日志就不可避免了。相关代码如下：&lt;/p&gt;using System;&lt;br/&gt;using System.Collections.Generic;&lt;br/&gt;using System.IO;&lt;br/&gt;using System.Linq;&lt;br/&gt;using System.Text;&lt;br/&gt;using Gtk;&lt;br/&gt;&lt;br/&gt;namespace MonitoringApp.Code.App&lt;br/&gt;{&lt;br/&gt;    public class LogManager&lt;br/&gt;    {&lt;br/&gt;        public static object obj = new object();&lt;br/&gt;        static LogManager()&lt;br/&gt;        {&lt;br/&gt;        }&lt;br/&gt;        #region Fields and Properties&lt;br/&gt;        private static string _logPath = string.Empty;&lt;br/&gt;        public static string LogPath&lt;br/&gt;        {&lt;br/&gt;            get&lt;br/&gt;            {&lt;br/&gt;                lock (obj)&lt;br/&gt;                {&lt;br/&gt;                    if (_logPath == string.Empty)&lt;br/&gt;                    {&lt;br/&gt;                        var _logStr = string.Format("{0}/log/{1}/{2}", Path.Combine(Directory.GetCurrentDirectory(), "Data"), DateTime.Now.ToString("yyyy-MM"), DateTime.Now.Day);&lt;br/&gt;                        if (!System.IO.Directory.Exists(_logStr))&lt;br/&gt;                            System.IO.Directory.CreateDirectory(_logStr);&lt;br/&gt;                        return string.Format("{0}/", _logStr);&lt;br/&gt;                    }&lt;br/&gt;                    return _logPath;&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;            set { _logPath = value; }&lt;br/&gt;        }&lt;br/&gt;        private static string _logFielPrefix = string.Empty;&lt;br/&gt;        public static string LogFielPrefix&lt;br/&gt;        {&lt;br/&gt;            get { return _logFielPrefix; }&lt;br/&gt;            set { _logFielPrefix = value; }&lt;br/&gt;        }&lt;br/&gt;        #endregion&lt;br/&gt;&lt;br/&gt;        #region Log&lt;br/&gt;&lt;br/&gt;        public static void WriteLog(string logFile, string msg)&lt;br/&gt;        {&lt;br/&gt;            try&lt;br/&gt;            {&lt;br/&gt;                lock (obj)&lt;br/&gt;                {&lt;br/&gt;                    var _sb = new System.Text.StringBuilder();&lt;br/&gt;                    _sb.Append(LogPath).Append(LogFielPrefix).Append(logFile).Append(".Log");&lt;br/&gt;                    using (var _sw = System.IO.File.AppendText(_sb.ToString()))&lt;br/&gt;                    {&lt;br/&gt;                        _sw.WriteLine("==============================={0}===============================", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));&lt;br/&gt;                        _sw.WriteLine(msg);&lt;br/&gt;                        _sw.Flush();&lt;br/&gt;                        _sw.Close();&lt;br/&gt;                        Console.WriteLine(msg);&lt;br/&gt;&lt;br/&gt;                    }&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;            catch&lt;br/&gt;            { }&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        public static void WriteLog(LogFile logFile, string msg)&lt;br/&gt;        {&lt;br/&gt;            WriteLog(logFile.ToString(), msg);&lt;br/&gt;        }&lt;br/&gt;        public static void WriteTraceLog(string msg)&lt;br/&gt;        {&lt;br/&gt;            Console.WriteLine(msg);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        public static void WriteErrorLog(string msg)&lt;br/&gt;        {&lt;br/&gt;            WriteLog(LogFile.Error, msg);&lt;br/&gt;        }&lt;br/&gt;        public static void WriteErrorLog(Exception ex)&lt;br/&gt;        {&lt;br/&gt;            var _sbError = new StringBuilder();&lt;br/&gt;            _sbError.Append("[Message]").Append(ex.Message);&lt;br/&gt;            _sbError.Append("\r\n[TargetSite]").Append(ex.TargetSite);&lt;br/&gt;            _sbError.Append("\r\n[StackTrace]").Append(ex.StackTrace);&lt;br/&gt;            _sbError.Append("\r\n[Source]").Append(ex.Source);&lt;br/&gt;            foreach (var _item in ex.Data.Keys)&lt;br/&gt;            {&lt;br/&gt;                _sbError.Append("\r\n[").Append(_item).Append("]").Append(ex.Data[_item]);&lt;br/&gt;            }&lt;br/&gt;            if (ex.InnerException != null &amp;amp;&amp;amp; ex.InnerException.Message != ex.Message)&lt;br/&gt;            {&lt;br/&gt;                _sbError.AppendLine("____________________________________________________________________________________");&lt;br/&gt;                _sbError.Append("[Message]").Append(ex.InnerException.Message);&lt;br/&gt;                _sbError.Append("\r\n[TargetSite]").Append(ex.InnerException.TargetSite);&lt;br/&gt;                _sbError.Append("\r\n[StackTrace]").Append(ex.InnerException.StackTrace);&lt;br/&gt;                _sbError.Append("\r\n[Source]").Append(ex.InnerException.Source);&lt;br/&gt;                _sbError.AppendLine("____________________________________________________________________________________");&lt;br/&gt;            }&lt;br/&gt;            WriteLog(LogFile.Error, _sbError.ToString());&lt;br/&gt;        }&lt;br/&gt;        public static void WriteWarningLog(string msg)&lt;br/&gt;        {&lt;br/&gt;            WriteLog(LogFile.Warning, msg);&lt;br/&gt;        }&lt;br/&gt;        #endregion&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    public enum LogFile&lt;br/&gt;    {&lt;br/&gt;        Trace,&lt;br/&gt;        Warning,&lt;br/&gt;        Error,&lt;br/&gt;        SQL,&lt;br/&gt;        System&lt;br/&gt;    }&lt;br/&gt;}&lt;p&gt;&lt;strong&gt;值得注意的是&amp;ldquo;Directory.GetCurrentDirectory()&lt;/strong&gt;&lt;strong&gt;&amp;rdquo;&lt;/strong&gt;&lt;strong&gt;可以获取到当前用户的个人目录，至于获取到程序当前目录路径，Winform的那一套不管用（如果哪位朋友找到了适合的方法，请留言）。苹果系统和Window系统差别太大，从没玩过苹果系统，刚开始玩还挺不习惯的。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;接下来，讲述如何监控目录以及定时备份，最后讲述如何发布部署。发布部署才是最重要的一环。不上生产线，就不知道会有什么问题。当初以为这个小程序，一天就能搞定，结果中秋3天都废了。还好万幸搞定。时间关系，就此打住。&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/codelove/aggbug/2192366.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/codelove/archive/2011/09/26/2192366.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/codelove/archive/2011/08/27/2155769.html</id><title type="text">EXT.NET高效开发（四）——实用技巧</title><summary type="text">很久没有发文了，一是忙上线的事。二是有些颓废了，身体虚弱了，感觉工作没有激情了，不太想写。好了，既然承诺了写下去，那么就坚持吧。俗话说“授人以鱼，不如授之以渔”，下面就开始本篇之旅吧。1）检测浏览器与IE版本。这里是在后台检查，然后输出相应的Extjs脚本，你也可以在前台写JS检测。这里没有使用EXT.NET的对象，直接写的纯Extjs。这里是在后台代码进行判断，首先获取浏览器信息判断，然后注册相应的Extjs脚本。当用户点是，则下载。注释很完整，就不多做解释了。 if (!IsPostBack) { HttpBrowserC...</summary><published>2011-08-27T12:49:00Z</published><updated>2011-08-27T12:49:00Z</updated><author><name>雪雁</name><uri>http://www.cnblogs.com/codelove/</uri></author><link rel="alternate" href="http://www.cnblogs.com/codelove/archive/2011/08/27/2155769.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/codelove/archive/2011/08/27/2155769.html"/><content type="html">&lt;p&gt;&lt;strong&gt;很久没有发文了，一是忙上线的事。二是有些颓废了，身体虚弱了，感觉工作没有激情了，不太想写。好了，既然承诺了写下去，那么就坚持吧。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;俗话说&amp;ldquo;授人以鱼，不如授之以渔&amp;rdquo;，&lt;/strong&gt;&lt;strong&gt;下面就开始本篇之旅吧。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;strong&gt;1）检测浏览器与IE版本。&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;这里是在后台检查，然后输出相应的Extjs脚本，你也可以在前台写JS检测。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;这里没有使用EXT.NET的对象，直接写的纯Extjs。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201108/201108272048364779.png"&gt;&lt;img style="display: inline; border-width: 0px;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201108/201108272048423006.png" width="644" height="158" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;这里是在后台代码进行判断，首先获取浏览器信息判断，然后注册相应的Extjs脚本。当用户点是，则下载。注释很完整，就不多做解释了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;         if (!IsPostBack)&lt;br/&gt;            {&lt;br/&gt;                HttpBrowserCapabilities _hbc = Request.Browser;&lt;br/&gt;                //如果是IE并且主版本低于8，则弹出一个模式窗口，显示警告和下载页面（需要客户将网站加入到信任列表）&lt;br/&gt;                if (_hbc.IsBrowser("IE"))&lt;br/&gt;                {&lt;br/&gt;                    //低于IE8&lt;br/&gt;                    if (_hbc.MajorVersion &amp;lt; 8)&lt;br/&gt;                    {&lt;br/&gt;                        //弹出确认提示框&lt;br/&gt;                        string _strScript = "Ext.onReady(function(){Ext.MessageBox.confirm('警告', '&amp;lt;b style=\"color:red;\"&amp;gt;*您的IE版本过低，存在安全隐患，并可能造成部分功能无法访问，建议您立刻升级您的IE浏览器。&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;*是否立即升级您的浏览器，以获取更佳更安全的体验？&amp;lt;br /&amp;gt;*如果您已经安装IE8，浏览器仍弹出此对话框，请重启电脑再试。', function(btn){if(btn=='yes')window.location.href='/FormServerTemplates/UploadIEVersion.aspx?DownLoad=true';});});";&lt;br/&gt;                        //注册脚本块&lt;br/&gt;                        Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "updateIE", _strScript, true);&lt;br/&gt;                    }&lt;br/&gt;                }&lt;br/&gt;                else&lt;br/&gt;                {&lt;br/&gt;                    //对非IE浏览器仅弹出警告&lt;br/&gt;                    string _strScript = " Ext.MessageBox.alert('警告','您正在使用非IE浏览器访问，可能部分功能无法访问。');";&lt;br/&gt;                    Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "updateIE", _strScript, true);&lt;br/&gt;                }&lt;br/&gt;            }&lt;p&gt;当然，你也可以在前台写JS来检查。如下面代码：&lt;/p&gt;        Ext.onReady(function () {&lt;br/&gt;            if (Ext.isChrome) {&lt;br/&gt;                Ext.Msg.alert("浏览器检测", "你使用的是Chrome");&lt;br/&gt;            }&lt;br/&gt;            if (Ext.isIE) {&lt;br/&gt;                Ext.Msg.alert("浏览器检测", "你使用的是IE");&lt;br/&gt;            }&lt;br/&gt;            if (Ext.isIE6) {&lt;br/&gt;                Ext.Msg.alert("浏览器检测", "你使用的是IE");&lt;br/&gt;            }&lt;br/&gt;            if (Ext.isIE7) {&lt;br/&gt;                Ext.Msg.alert("浏览器检测", "你使用的是IE7");&lt;br/&gt;            }&lt;br/&gt;            if (Ext.isIE8) {&lt;br/&gt;                Ext.Msg.alert("浏览器检测", "你使用的是IE8");&lt;br/&gt;            }&lt;br/&gt;            if (Ext.isOpera) {&lt;br/&gt;                Ext.Msg.alert("浏览器检测", "你使用的是Opera");&lt;br/&gt;            }&lt;br/&gt;            if (Ext.isGecko3) {&lt;br/&gt;                Ext.Msg.alert("浏览器检测", "你使用的是火狐");&lt;br/&gt;            }&lt;br/&gt;);&lt;p&gt;&lt;strong&gt;&lt;strong&gt;2) 检测是否安装了Silverlight4.0。&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;个人对Silverlight也比较喜爱，所以项目中不可避免的会用到。比如上传，施工计划系列（&lt;a href="http://www.cnblogs.com/codelove/archive/2011/06/12/2079232.html"&gt;Silverlight&amp;mdash;&amp;mdash;施工计划日报表（四）&amp;mdash;&amp;mdash;自适应浏览器窗口&lt;/a&gt;、&lt;a href="http://www.cnblogs.com/codelove/archive/2011/06/03/2071267.html"&gt;Silverlight&amp;mdash;&amp;mdash;施工计划日报表（三）&lt;/a&gt;、&lt;a href="http://www.cnblogs.com/codelove/archive/2011/05/28/2060806.html"&gt;Silverlight&amp;mdash;&amp;mdash;施工计划日报表（二）&lt;/a&gt;、&lt;a href="http://www.cnblogs.com/codelove/archive/2011/05/26/2058068.html"&gt;Silverlight&amp;mdash;&amp;mdash;施工计划日报表（一）&lt;/a&gt;）等等。所以检测客户端是否安装了Silverlight也是不可避免的了。这点虽然与Extjs不能挂钩，但是也许大家也有用得着的地方。接下来的随笔还会介绍EXT.NET如何与Silverlight结合布局。&lt;/p&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br/&gt;    function CheckSilverlightInstalled() {&lt;br/&gt;        var isSilverlightInstalled = false;&lt;br/&gt;        try {&lt;br/&gt;            try {&lt;br/&gt;                var slControl = new ActiveXObject('AgControl.AgControl'); //检查IE&lt;br/&gt;                isSilverlightInstalled = true;&lt;br/&gt;            } catch (e) {&lt;br/&gt;                if (navigator.plugins["Silverlight Plug-In"])&lt;br/&gt;                //检查非IE &lt;br/&gt;                { isSilverlightInstalled = true; }&lt;br/&gt;            }&lt;br/&gt;        } catch (e) { } return isSilverlightInstalled;&lt;br/&gt;    }&lt;br/&gt;    if (!CheckSilverlightInstalled) {&lt;br/&gt;        Ext.onReady(function() { Ext.MessageBox.confirm('警告', '&amp;lt;b style=\"color:red;\"&amp;gt;*您未安装Silverlight 4.0版本（大约5M），请立即安装。点击【是】立即下载安装。&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;*上传附件以及施工计划需要Silverlight 4.0支持。&amp;lt;br /&amp;gt;*Silverlight是微软丰富型互联网应用程序策略的主要应用程序开发平台之一，请放心使用。', function(btn) { if (btn == 'yes') window.location.href = '/FormServerTemplates/UploadIEVersion.aspx?DownLoad=true'; }); });&lt;br/&gt;    }&lt;br/&gt;&amp;lt;/script&amp;gt;&lt;p&gt;&lt;strong&gt;&lt;strong&gt;3)下载&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;总是有人问，为什么使用EXT.NET的服务器事件无法实现下载，或者没反应，后台写的操作也不起作用了，或者点击按钮就出乱码了。其实想想就明白了，EXT.NET在后台对前台进行操作，依赖的是Extjs，也就是它会向前台输送Javascript，干的好好的，你突然向人家输送一个文件流，那么人家就不认了。那么怎么实现下载呢？其实很简单，不要写在DirectEvent事件中，或者在另一个页面进行处理（放心，浏览器不会跳转）。比如在页面上进行下载，页面上的列模型如下：&lt;/p&gt;&amp;lt;ColumnModel ID="ColumnModel2" runat="server"&amp;gt;&lt;br/&gt;                       &amp;lt;Columns&amp;gt;&lt;br/&gt;                           &amp;lt;ext:RowNumbererColumn /&amp;gt;&lt;br/&gt;                           &amp;lt;ext:Column Header="附件ID" Hidden="true" DataIndex="Id"&amp;gt;&lt;br/&gt;                           &amp;lt;/ext:Column&amp;gt;&lt;br/&gt;                           &amp;lt;ext:Column Header="文件名" DataIndex="FileName"&amp;gt;&lt;br/&gt;                           &amp;lt;/ext:Column&amp;gt;&lt;br/&gt;                           &amp;lt;ext:DateColumn Header="创建日期" DataIndex="CreateDate" Format="yyyy-MM-dd" /&amp;gt;&lt;br/&gt;                           &amp;lt;ext:Column Header="上传用户" DataIndex="UserName" /&amp;gt;&lt;br/&gt;                           &amp;lt;ext:CommandColumn Header="操作"&amp;gt;&lt;br/&gt;                               &amp;lt;Commands&amp;gt;&lt;br/&gt;                                   &amp;lt;ext:GridCommand Icon="PagePaste" CommandName="DownLoad" Text="下载" /&amp;gt;&lt;br/&gt;                               &amp;lt;/Commands&amp;gt;&lt;br/&gt;                           &amp;lt;/ext:CommandColumn&amp;gt;&lt;br/&gt;                       &amp;lt;/Columns&amp;gt;&lt;br/&gt;                   &amp;lt;/ColumnModel&amp;gt;那么怎么实现这个下载呢？添加监听事件如下：&amp;lt;Listeners&amp;gt;&lt;br/&gt;    &amp;lt;Command Handler="cellCommand(command, record);" /&amp;gt;&lt;br/&gt;&amp;lt;/Listeners&amp;gt;&lt;p&gt;然后写下下面的JS函数：&lt;/p&gt;      function cellCommand(command, record)&lt;br/&gt;        {&lt;br/&gt;            if(command=='DownLoad')&lt;br/&gt;                window.location.href="/FormServerTemplates/DownLoad.aspx?Id="+record.data.Id+"&amp;amp;FileName="+escape(record.data.FileName);&lt;br/&gt;        }&lt;p&gt;然后在这个页面DownLoad.aspx去处理你的下载逻辑就行了。比如下面的函数：&lt;/p&gt;private void DownLoadIE(int _type)&lt;br/&gt;        {&lt;br/&gt;            Response.ContentType = "application/x-zip-compressed";&lt;br/&gt;            Response.AddHeader("Content-Disposition", "attachment;filename=IE8-WindowsXP-x86-CHS.exe");&lt;br/&gt;            string filename = Server.MapPath("~/DownLoad/IE8/IE8-WindowsXP-x86-CHS.exe");&lt;br/&gt;            Response.TransmitFile(filename);&lt;br/&gt;        }&lt;p&gt;刚才说的是在页面上下载，那么假如我要在EXT.NET服务器事件（DirectEvent）中下载怎么办呢？也不难，只要跳转就行：&lt;/p&gt;        protected void btnDownLoad_Click(object sender, DirectEventArgs e)&lt;br/&gt;        {&lt;br/&gt;            Session["RPTPackageNotice"] = _rptPackageNotice;&lt;br/&gt;            X.Redirect("/FormServerTemplates/DownLoad.aspx", "请稍候，下载马上就开始了...");&lt;br/&gt;        }&lt;p&gt;这里，你也可以使用Response.Redirect来进行跳转哦。至于新页面的数据，你可以考虑放在Session或者Cache里面（用完了记得删哦），也可以重新从数据库中获取。是不是挺方便呢，赶快回家试试吧。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4）后台执行JS或者调用前台函数&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;如果你希望在DirectEvent事件中执行js，那么可以这么做：&lt;/p&gt;        X.Js.Alert("测试");&lt;br/&gt;        X.Js.AddScript("alert(0);");&lt;br/&gt;        X.Js.Confirm("确认", "alert('已确认！');");&lt;br/&gt;        X.Js.Call("alert", 1);&lt;br/&gt;        X.AddScript("alert(2);");&lt;br/&gt;        ResourceManager1.AddScript("alert(3);");&lt;p&gt;这几种写法都是可行的，最终会向浏览器输出如下内容：&lt;/p&gt;{script:"alert(\"测试\");alert(0);(function(){var result=confirm(\"确认\");alert('已确认！');})();alert(1);alert(2);alert(3);"}&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;这下子，你明白了EXT.NET是如何在后台对界面进行更改的吧。其实上面的这么多函数，最终调用的都是ResourceManager1.AddScript函数哦。也许大家对这些函数用的不多，但本人却相当喜欢。有时候写写JS也是一种不错的享受，拼来拼去，还不就是为了这结果。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;5）页面提示跳转&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;既然人家封装了，既然用的是EXT.NET，改用的还是要用的。比如上面的代码：&lt;/p&gt;&lt;p&gt;X.Redirect("/FormServerTemplates/DownLoad.aspx", "请稍候，下载马上就开始了...");&lt;/p&gt;&lt;p&gt;显示效果如下：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/codelove/201108/201108272048433529.png"&gt;&lt;img style="display: inline; border: 0px;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/codelove/201108/201108272048442317.png" width="244" height="40" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;这样更友好，其实其原理也很简单，如下面代码：&lt;/p&gt;            ResourceManager rm = ResponseManager.ResourceManager;&lt;br/&gt;            if (msg.IsNotEmpty())&lt;br/&gt;            {&lt;br/&gt;                X.Mask.Show(new MaskConfig&lt;br/&gt;                {&lt;br/&gt;                    Msg = msg,&lt;br/&gt;                    MsgCls = msgCls&lt;br/&gt;                });&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            rm.AddScript("window.location=\"".ConcatWith(TokenUtils.IsRawToken(url) ? url : rm.ResolveClientUrl(url), "\";"));&lt;p&gt;也就是首先获取当前的ResourceManager 对象，显示一个带消息的遮罩层，然后添加window.location转向。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;6）在后台获取某个EXT.NET控件。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;你可以使用ControlUtils.FindControl来获取，也可以使用容器空间的FindControl方法来获取，都一样方便。但是本人比较喜欢后者。找到之后，转化一下，就可以进行平常的操作了。&lt;/p&gt;&lt;p&gt;比如下面的代码，获取控件之后，进行了类型判断，禁用该控件。&lt;/p&gt;                        Control _control = userControl.FindControl(_controlFiled.Value);&lt;br/&gt;                        if (_control == null)&lt;br/&gt;                        {&lt;br/&gt;                            LogManager.WriteWarningLog(string.Format("控件{0}不存在！", _controlFiled.Value));&lt;br/&gt;                            continue;&lt;br/&gt;                        }&lt;br/&gt;                        if (_control is TextFieldBase)&lt;br/&gt;                            (_control as TextFieldBase).Disabled = Convert.ToBoolean(_controlFiled.Attribute("Disabled").Value);&lt;br/&gt;                        else if (_control is CheckboxBase)&lt;br/&gt;                            (_control as CheckboxBase).Disabled = Convert.ToBoolean(_controlFiled.Attribute("Disabled").Value);&lt;br/&gt;                        else if (_control is CheckboxGroupBase)&lt;br/&gt;                            (_control as CheckboxGroupBase).Disabled = Convert.ToBoolean(_controlFiled.Attribute("Disabled").Value);&lt;br/&gt;                        else if (_control is PanelBase)&lt;br/&gt;                            (_control as PanelBase).Disabled = Convert.ToBoolean(_controlFiled.Attribute("Disabled").Value);&lt;p&gt;但是个人建议不要这么写，还是直接输出JS来的快，简单又方便，不过前提是你得判断下它是否存在setDisabled函数，当然ID要的是客户端ID。&lt;strong&gt;这下你明白了为什么本人有时候喜欢写JS的原因了么？简介、方便、直观、高效。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;写累了，就此打住好了。不出意外的话，下一篇写写怎么结合ASP.NET服务器控件，怎么结合Silverlight等等。&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/codelove/aggbug/2155769.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/codelove/archive/2011/08/27/2155769.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
