摘要:
更好地使用jQuery,这里总结了8个小技巧。 1、DOM遍历是昂贵的,将变量缓存起来。 //不推荐var h = $('#ele').height();$('#ele').css('height', h-20); //推荐var $ele = $('#ele');var h = $ele.height();$ele.css('height',h-20); 2、尽可能地合并函数。 ...
阅读全文
posted @ 2015-04-07 16:04
Darren Ji
阅读(806)
推荐(2)
摘要:
最近踢了场球,9人制比赛,上半场我们采用防守阵型效果不佳,下半场采用进攻阵型取得了比赛的主动。我们上下半场所采取的策略,似乎可以用"装饰器"模式实现一遍。 首先肯定是抽象基类。 public abstract class OurStrategy { public abstract void Play(string msg); } 通常,在上半场,我...
阅读全文
posted @ 2015-04-07 15:05
Darren Ji
阅读(493)
推荐(0)
摘要:
对集合排序,可能最先想到的是使用OrderBy方法。 class Program { static void Main(string[] args) { IEnumerable result = GetStudents().OrderBy(r => r.Score); foreach (var i...
阅读全文
posted @ 2015-04-07 08:27
Darren Ji
阅读(6140)
推荐(0)
摘要:
通常说泛型,比如List是类型安全的,为什么这么说呢? 先来看一个类型不安全的例子。 class Program { static void Main(string[] args) { var tempArr = new ArrayList(); tempArr.Add(1); ...
阅读全文
posted @ 2015-04-04 07:46
Darren Ji
阅读(1903)
推荐(0)
摘要:
Dictionary是一个键值类型的集合。它有点像数组,但Dictionary的键可以是任何类型,内部使用Hash Table存储键和值。本篇自定义一个类型安全的泛型Dictionary,并且可以被序列化。 为了使自定义的泛型Dictionary可以被序列化成xml,需要实现泛型IXmlSerializable接口。 public class MySerializableDictiona...
阅读全文
posted @ 2015-04-04 07:26
Darren Ji
阅读(2288)
推荐(0)
摘要:
如果把商户网站使用第三方支付平台(比如支付宝)的原理搞清楚,那编程就变得简单多了。 整个过程大致这样: 1、商户与支付宝签约。2、在商户网站购买商品,填写数量,确定购买后跳转到结账页面。结账页面可能包括订单号、定单状态(已支付/未支付)、收货人信息、配送方式、定单金额、配送费用、总金额、支付方式、结账按钮,等等。3、当点击"结账"按钮,会重定向到支付宝付款页面。而在后台,实际上是把数据提交到支...
阅读全文
posted @ 2015-04-03 16:38
Darren Ji
阅读(5300)
推荐(3)
摘要:
如果网站使用html5、css3、自适应等新特性,可能有些浏览器版本不支持。这时候,需要提醒浏览者更新浏览器的版本到最新。 本篇用到的插件为:http://jreject.turnwheel.com/ HomeController中: public class HomeController : Controller { public ActionResult ...
阅读全文
posted @ 2015-04-02 09:16
Darren Ji
阅读(1845)
推荐(0)
摘要:
IEnumerable, ICollection, IList,每种接口只适合某些特定场景,如何区别使用呢? IEnumerable接口,只提供了一个获取迭代器的方法,这也是为什么可以使用foreach遍历实现了IEnumerable接口集合的原因。 public interface IEnumerable
{ IEnumerator GetEnumerator();
} ICo...
阅读全文
posted @ 2015-04-02 06:40
Darren Ji
阅读(1289)
推荐(0)
摘要:
关于IEnumerable和IQueryable的区别,这事还要从泛型委托Func说起。来看一个简单的泛型委托例子: class Program { static void Main(string[] args) { Func f = i => i > 5; Console.WriteLine(f(3...
阅读全文
posted @ 2015-04-01 12:03
Darren Ji
阅读(1457)
推荐(2)
摘要:
我们常用IEnumerable,却忽视IEnumerator。简单来说,IEnumerable是可以被循环遍历的集合,IEnumerator实施循环遍历。 接口分别是:public interface IEnumerator
{ bool MoveNext(); object Current{get;} void Reset();
}
public interface ...
阅读全文
posted @ 2015-04-01 07:28
Darren Ji
阅读(571)
推荐(0)
摘要:
本篇实践在ASP.NET MVC 4下使用Session来保持表单的状态。 本篇的源码在这里: https://github.com/darrenji/KeepFormStateUsingSession 如上,输入俱乐部名称,点击"添加球员",输入球员名称。我们希望,点击"到别的地方转转"跳转到另外一个视图页,当再次返回的时候能保持表单的状态。 点击"到别的地方转转"跳转到另外一个视...
阅读全文
posted @ 2015-03-30 23:27
Darren Ji
阅读(3717)
推荐(1)
摘要:
我们知道,在ASP.NET MVC中实现多选Select的话,使用Html.ListBoxFor或Html.ListBox方法就可以。在实际应用中,到底该如何设计View Model, 控制器如何接收多选Select的选中项呢? 实现效果如下: 初始状态某些选项被选中。 当按着ctrl键,进行重新选择多项,点击"提交"按钮,把选中项的id拼接。 对于Select中的项,包含显示值,V...
阅读全文
posted @ 2015-03-30 09:29
Darren Ji
阅读(3970)
推荐(1)
摘要:
在ASP.NET MVC的视图页向控制器传递异步数据,可能是数组,JavaScript对象,json,表单数据,等等。 关于数据,JavaScript对象有时候和json长得一模一样,有么有? var person = {Name: 'darren', Age: 21};以上是一个JavaScript对象。不过也可以这样表示: var person = {"Name":"darren"...
阅读全文
posted @ 2015-03-29 10:27
Darren Ji
阅读(1486)
推荐(2)
摘要:
本篇在ASP.NET MVC下实践使用Quartz.NET执行定时任务。 首先通过NuGet安装Quartz.NET。 使用Quartz.NET的大致思路是:1、实现IJob接口,定义具体要做的事情2、使用Quartz.NET的API定义定时任务规则3、在Application_Start注册定时任务 实现IJob接口。 public class MyJob : IJob ...
阅读全文
posted @ 2015-03-28 23:06
Darren Ji
阅读(3903)
推荐(1)
摘要:
使用委托来做一些事情,大致思路是: 1、定义声明一个委托,规定输入参数和输出类型。2、写几个符合委托定义的方法。3、把方法列表赋值给委托4、执行委托 internal delegate int MyDelegate(); class Program { static void Main(string[] args) { ...
阅读全文
posted @ 2015-03-28 11:48
Darren Ji
阅读(866)
推荐(1)
摘要:
在.NET4.0中,我可以借助System.Speech组件让电脑来识别我们的声音。 以上,当我说"name",显示"Darren",我说"age",显示"永远21"。如何做呢? 首先要开启电脑的语音识别功能。 右键电脑右下方的扬声器,选择"录音设备"。 点击默认的"麦克风",再点击左下角的"配置"按钮。 点击"启动语音识别"。 一系列简单设置后,屏幕上出现如下: 在VS中创建...
阅读全文
posted @ 2015-03-28 09:59
Darren Ji
阅读(11467)
推荐(3)
摘要:
对于时间日期,有时我们希望以更友好的方式展示,比如几秒钟前,几分钟前,几小时前...... 这其中:1、需要判断输入日期的格式是否正确2、使用TimeSpan计日期时间之间的间隔,然后可以转换成秒、分钟,等等3、最后转换成秒、分钟、小时、天等,以整型显示 class Program { static void Main(string[] args) ...
阅读全文
posted @ 2015-03-27 08:29
Darren Ji
阅读(1061)
推荐(1)
摘要:
遇到了这样的一个需求:通过勾选checkbox来更改select的内容。 在没有勾选checkbox之前是这样的: 在勾选checkbox之后是这样的: 想通过ajax异步来实现。所以,从控制器拿到的json数据,在控制器中应该先是Dictionary类型,然后再转换成json格式。 在没有勾选checkbox之前,select中内容对应的Model为: public c...
阅读全文
posted @ 2015-03-26 09:22
Darren Ji
阅读(1655)
推荐(0)
摘要:
本篇体验在ASP.NET MVC 4中使用Log4Net记录日志。 通过NuGet安装Log4Net。 需求是:当出错时导向到Error.html静态页面,Log4Net记录错误信息。 大致的思路是: 1、写一个记录日志的接口2、实现记录日志接口的类,用Log4Net的API实现3、在Web.config中配置Log4Net4、在Global.asax中注册Log4Net5、自定义一个出...
阅读全文
posted @ 2015-03-26 08:19
Darren Ji
阅读(1940)
推荐(1)
摘要:
在需要处理很多分类以及导航的时候,树形导航菜单就比较适合。例如在汽车之家上: 页面主要分两部分,左边是导航菜单,右边显示对应的内容。现在,我们就在ASP.NET MVC 4 下临摹一个,如下: 实现的效果包括:1、点击导航菜单上的品牌,左侧显示该品牌下的所有车型。2、点击导航菜单上的车系,左侧显示该车系下的所有车型。3、点击左侧上方的字母导航,锚点跳到导航菜单的对应部分。4、页面加载完...
阅读全文
posted @ 2015-03-25 09:45
Darren Ji
阅读(12380)
推荐(1)
摘要:
对于刚创建的元素,使用jQuery的each方法,有时候会不起作用。解决方案大致有2种: 1、刚创建完的时候,就使用each方法 $('#btn').on("click", function(){ $('#div').append(""); $("input").each(function(){ //TODO: });
}); 2、页面加载完毕...
阅读全文
posted @ 2015-03-25 08:11
Darren Ji
阅读(826)
推荐(0)
摘要:
当我们想把一个字符串转换成整型int的时候,我们可能会想到如下三种方式:int.Parse,Convert.ToInt32和int.TryParse。到底使用哪种方式呢? 先来考虑string的可能性,大致有三种可能:1、为null2、不是整型,比如是字符串3、超出整型的范围 基于string的三种可能性,分别尝试。 □ 使用int.Parse string str = null;
...
阅读全文
posted @ 2015-03-23 09:31
Darren Ji
阅读(2220)
推荐(1)
摘要:
在C#中,在处理字符串拼接的时候,使用StringBuilder的效率会比硬拼接字符串高很多。到底有多高,如下: static void Main(string[] args) { string str1 = string.Empty; Stopwatch sw1 = new Stopwatch(); ...
阅读全文
posted @ 2015-03-23 08:52
Darren Ji
阅读(1918)
推荐(1)
摘要:
→新建一个项目→选择"其他语言","Visual C++",并选择"win32控制台应用程序",并给控制台应用程序起名。→点击"下一步"→点击"完成"→编写如下#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{ printf("Hello C\n"); getchar(); return 0;
} →点击"...
阅读全文
posted @ 2015-03-21 20:39
Darren Ji
阅读(1731)
推荐(0)
摘要:
缓存很多条数据,但只读取其中的一部分数据,如何处理? 比如在缓存中保存了100条数据,但读取分页数据,比如每次分页只读取10条数据。这种情况下,可以把这100条数据拆分成10次分别保存起来。每一个缓存项的key需要特别的设计,比如:01-10-products, 02-10-products...... 如何避免缓存一些不需要的数据? 比如:public class Teacher
{...
阅读全文
posted @ 2015-03-11 21:31
Darren Ji
阅读(357)
推荐(0)
摘要:
如果按存储的地方来分类,缓存分为哪些? 分为本地缓存和分布式缓存。本地缓存就是把数据保存应用程序所在的那台机器的内存中;而分布式缓存是把数据放在缓存服务器中,这个缓存服务器有可能是和应用服务器在同一台机器,这时候的是跨进程访问,如果缓存服务器和应用程序服务器不在同一台机器,这时候就可能会设计到跨域跨进程访问了。 缓存通过何种方式来找到缓存中的数据? 表面上是通过键来找到对象,实际是通过...
阅读全文
posted @ 2015-03-11 17:44
Darren Ji
阅读(461)
推荐(0)
摘要:
当涉及到跨进程甚至是跨域传输数据的时候,我们需要把对象序列化和反序列化。 首先可以使用Serializable特性。 [Serializable] public class Person { public string _firstName; public string _secondName; //序列化 ...
阅读全文
posted @ 2015-03-08 23:40
Darren Ji
阅读(2045)
推荐(3)
摘要:
在ASP.NET MVC项目中遇到了这样的一个问题,假设父页面有一个iframe 通过父页面上的一个按钮触发该iframe的src属性指向一个url:
var url = "/somecontrollername/someactionname";
$("#sth").attr("src", url); 通过someactionname这个action渲染的视图,称为子页面吧。...
阅读全文
posted @ 2015-03-01 00:32
Darren Ji
阅读(3272)
推荐(0)
摘要:
本篇接着上一篇"ASP.NET Web API实践系列06, 在ASP.NET MVC 4 基础上增加使用ASP.NET WEB API",尝试获取数据。 在Models文件夹下创建Comment类: namespace MvcApplication5.Models
{ public class Comment { public int ID { get; ...
阅读全文
posted @ 2015-02-11 13:18
Darren Ji
阅读(970)
推荐(0)
摘要:
本篇尝试在现有的ASP.NET MVC 4 项目上增加使用ASP.NET Web API。 新建项目,选择"ASP.NET MVC 4 Web应用程序"。 选择"基本"项目模版。 在Controllers文件夹下添加一个名称为"TestController"的空API控制器。 在引用文件夹中多了以下程序集:System.Web.HttpSystem.Web.Http.WebHostS...
阅读全文
posted @ 2015-02-11 10:43
Darren Ji
阅读(842)
推荐(0)
摘要:
本篇使用EF Code First搭建一个简易ASP.NET MVC 4网站,并允许数据库迁移。 创建一个ASP.NET MVC 4 网站。 在Models文件夹内创建Person类。 public class Person { public int ID { get; set; } public string FirstName { ge...
阅读全文
posted @ 2015-02-10 18:04
Darren Ji
阅读(1451)
推荐(1)
摘要:
本篇用来梳理对象的创建、垃圾的回收,以及非托管资源的手动处理。 →首先运行应用程序,创建一个Windows进程。 →CLR创建一块连续的虚拟地址空间,这个地址空间就是托管堆。而且,这个地址空间最初并没有对应的物理存储空间。 虚拟地址空间分成2段。一个区段是普通堆,也叫GC堆,大小小于85000字节的引用类型对象的实例被分配在这里;另一个是大对象堆,大小大于等于85000字节的引用类型对象的...
阅读全文
posted @ 2015-02-09 23:09
Darren Ji
阅读(1008)
推荐(0)
摘要:
本篇是针对我在做项目过程中遇到的特定需求而做的一个Demo, 没有很大的通用性,读者酌情可绕行。 标题不能完全表达本意,确切的情景需要展开说。假设有三级分类,关于分类这样设计: public class Category { public int Id { get; set; } public string Name { get; set; }...
阅读全文
posted @ 2015-02-02 15:35
Darren Ji
阅读(943)
推荐(1)
摘要:
通常,我们看到的购物车是这样的: 虽然这种购物车显示方式被广泛运用,但我个人觉得不够直观。如果换成这样呢? 本篇的源码放在了:https://github.com/darrenji/ShoppingCartInMVC 以上购物车页能实现的效果包括:1、购物车明细:显示订购数量、总金额,清空购物车。2、购物车内产品:数量可调整,对应的小计和总计动态变化。点击移除按钮移除该产品...
阅读全文
posted @ 2015-01-29 16:14
Darren Ji
阅读(6965)
推荐(4)
摘要:
在日常工作中,我们时常需要向同事、朋友、甚至投资人介绍自己的项目,不一样的介绍方式会导致不同的效果。而介绍的难点在于: 1、如何引起别人的兴趣?2、听者的背景迥异,他们大都没有你的行业背景,介绍得越多,听者的疑问可能越多,如何避免?3、由于自己在项目上的投入,对项目有某种情结,如何避免夸大其辞,而保持客观? 通常,我们会以"陈述"的方式介绍: 我们在做一件事......提供......产品、服...
阅读全文
posted @ 2015-01-27 23:36
Darren Ji
阅读(1114)
推荐(1)
摘要:
序列化是将对象转换成字节流的过程,反序列化是把字节流转换成对象的过程。对象一旦被序列化,就可以把对象状态保存到硬盘的某个位置,甚至还可以通过网络发送给另外一台机器上运行的进程。本篇主要包括: ● 使用BinaryFormatter类进行序列化和反序列化● 使用ISerializable接口自定义序列化过程● 使用XmlSerializer类进行序列化和反序列化 □ 使用BinaryForm...
阅读全文
posted @ 2015-01-26 23:05
Darren Ji
阅读(934)
推荐(0)
摘要:
在ASP.NET MVC中,在链接中附加路由数据有2种方式。一种是把路由数据放在匿名对象中传递: 走你 一种是放在RouteValueDictionary对象中传递: 也走你 如果在控制器中,通过类似this.ControllerContext.RouteData.Values["somekey"].ToString()方式来获取路由数据是行不通的,因为Url.Action方法所带...
阅读全文
posted @ 2015-01-25 21:06
Darren Ji
阅读(1983)
推荐(0)
摘要:
在ASP.NET MVC中,可以使用RegularExpression特性来验证手机号码。 public class Customer { [Required(ErrorMessage = "必填")] [Display(Name = "手机号")] [RegularExpression(@"^1[3458][0-9]{9}$", ...
阅读全文
posted @ 2015-01-25 11:51
Darren Ji
阅读(5742)
推荐(1)
摘要:
有这样的一个需求:提交表单,如果用户没有登录,就跳转到登录页,登录后,跳转到原先表单提交这个页面,而且需要保持提交表单界面的数据。 提交表单的页面是一个强类型视图页,如果不考虑需要保持提交表单界面的数据,可以先设计这样的一个Model: public class Student
{ public string Name{get;set;} public string Retu...
阅读全文
posted @ 2015-01-25 00:22
Darren Ji
阅读(2049)
推荐(0)
摘要:
在很多电商网站中,在购物车所在页面,涉及到商品数量的时候,都会提供一个+号按钮和-号按钮来实现增1和减1,并且只允许input中输入数值。Bootstrap TouchSpin这款插件就是针对此需求而写。 首先引入必要的css和js文件。 □ 控制数值的精度和自增自减量 ...
阅读全文
posted @ 2015-01-23 23:47
Darren Ji
阅读(2620)
推荐(0)