微软最有价值技术专家(MVP),著有《编写高质量代码:改善C#程序的157个建议》,有着十多年的软件从业资历。
我们都知道 Orchard 的用户注册相当简单,现在,我们需要一个自定义的用户注册,现在,开始吧。 一:定义实体 Models/CustomerPartRecord.cs: public class CustomerPartRecord : ContentPartRecord{ publ...
在这一部分,我们继续完善我们的购物车,我们要做以下一些事情: 1:完成 shoppingcart.cshtml; 2:让用户可以更新数量及从购物车删除商品; 3:创建一个 widget,在上面可以看到商品数量,并且能链接到购物车; 同时,我们会接触到以下技术点: 1:熟悉 IContentManager.GetItemMetadata; 2:通过 IResourceManifestProvider 来包含 resources; 3:使用 KnockoutJS and jQuery,并且应用 MVVM。
这里,我们需要做一些事情,这些事情意味着深度改造前台: 1:为商品增加 添加到购物车 按钮,点击后功能实现; 2:商品排序; 3:购物车预览,以及添加 结算 按钮; 4:一个显式 购物车中有*个 商品 的widget; 一:添加到购物车 按钮 修改 Views/Parts/Product.
一:分类用现有技术怎么实现? 实际就是创建 Query 和 Projection,如果不知道怎么做,参考:Orchard之在前台显式一个属于自己的列表(在这篇里,还进行了稍稍拓展),当然,基础的知道,我们可以参考 Orchard 相关文档,不难。
一:创建 Part 1:项目引用 Orchard.Framework; 2:创建 Models 文件夹; 3:在 Models 文件夹下创建类 ProductPartRecord,如下: public class ProductPartRecord : ContentPartRecord{ public virtual decimal UnitPrice { get; set; } public virtual string Sku { get; set; } } 注意,为 virtual,因为 orchard 的 NHIBERNATE 需要这样。
在《http://www.cnblogs.com/luminji/p/3831281.html》中简单介绍了 Orchard 的模块开发,接下来,我们需要做个更复杂的例子,Orchard 版本的商场; 一:创建模块 可以使用 orchard 命令行的方式来创建新的模块,当然也就可以直接手工生成这样的模块。
一:当前现状 Orchard 并不提供筛选 Owner 的 Query,但是 Gallery 中有提供,那就是:Owner Queries。 Install 之,然后在解决方案中引入该 Project,同时,我们需要改 Target Framework 为 4.
一:Widget 可以理解为控件,可以直接被页面所引用。行为类似与分部页面,比如,我们可以创建一个 商品列表 Widget,然后这个 Widget 就可以被很多页面所引用。 理解 Widget 这个概念,我们不得不理解另外两个概念: 1:Layer Orchard 默认有这么几个层,Default、Authenticated、Anonymous、Disabled、TheHomepage。
生成新模版之后(参看:Orchard之生成新模板),紧接着就是模版开发了。 一:开发必备之 Shape Tracing 到了这一步,非常依赖一个工具,当然,它也是 Orchard 项目本身的一个 Module,这个工具就是 Shape Tracing。
在上一篇中,我们提到了 Migrations,这一篇稍微衍生一下。 1:Migrations 是什么 Orchard 提供了模块升级的功能,即,如果我们模块发布后,需要进行升级,我们可以通过编码来实现; 2:Migrations 的形式 public class Migrations : Data...
一:生成新项目 首先,要启动 Code Generation,参考《Orchard之生成新模板》。 其次,进入命令行,输入: codegen module Tminji.Requirement 这会在解决方案中生成一个新项目,如下: 二:路由匹配 在新项目中创建 Routes.
一:首先需要确保 List Module 的开始 即: Enable 之后,左边的列表中,多了一个 List 功能菜单。 二:为 Content type 选定 Cotainable 不再赘述。
在编码中,我们常常会碰到一个概念:上下文,如 线程上线文(Thread.CurrentContext),Http上下文(HttpContext.Current)等,那么上下文到底是什么,它们存在的意义是什么? 一:上下文 1:来源 可能无从追溯,但是早期 上下文 这个概念,可能来自于 CPU时间片 的切换。
如果使用了延迟加载(Lazy Load),那么,我们就会在序列化的时候碰到 延迟加载 变成了 “立即加载” 的问题。这是为什么呢,因为序列化器会去访问对象的属性,这就会导致属性的 get 方法内的代码被执行起来。
这里的实体类更倾向于数据传输对象(既DTO)。无论是编码风格采用 事务脚本 还是 领域模型,我们都会遇到各种各样的数据传输对象,尤其是传统事务脚本三层架构的编码中,更会遇到各类实体对象,一般来说,这些实体对象产生的原因如下: 1:为各类报表和查询服务的联表查询,会导致字段变多,带来的实体的属性增多。
一:启用 Code Generation 进入后台, Modules –> Developer Enable 之。 二:生成模版 首先,进入 Orchard 命令行 在 CMD 下到达解决方案的 Web 的 Bin 目录下,打开 Orchard 命令,输入: codegen...
ThreadLocal 类行是 .NET Framework 4.0 才开始支持的类型,MSDN 的解释只有简单的一句话:提供数据的线程本地存储,其提供的实例代码也不太好,有点为了演示而演示的目的。所以,一眼望去,我们并不知道这个类型有什么用。
ecto 在这里: http://illuminex.com/ecto/ 它是一款 MAC 上的 live writer,对我来说,没有 writer 之类的工具,我就宁可不写博客。 测试插入图片 测试插入代码 Something is wrong with the XAMPP installation :-( 本文基于Creative Commons Attribution 2.5 China Mainland License发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名http://www.cnblogs.com/luminji(包含链接)。
最近在公司内部做技术交流的时候,说起技能提升的问题,调研大家想要培训什么,结果大出我意料,很多人想要培训:面向对象编码。于是我抛出一个问题:你觉得我们现在的代码是面向对象的吗?有人回答:是,有人回答否。
Just like: dynamic paper = MockPaper(); LINQPad.Extensions.Dump(paper); //paper.Dump(); Use LINQPad.Extensions.Dump replace obj.Dump 本文基于Creative Commons Attribution 2.5 China Mainland License发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名http://www.cnblogs.com/luminji(包含链接)。
如果: dynamic expando = new ExpandoObject(); d.SomeProp=SomeValueOrClass; 然后,我们在控制器中: return new JsonResult(expando); 那么,我们的前台将会得到: ...
1:COUNT DISTINCT SELECT COUNT(DISTINCT [QS_QuestionStem].Id) AS ReqCount1, [QS_QuestionStem].
借助3个知识点可以完成这个步骤 一:with 字句 declare @pids nvarchar(max); declare @pNames nvarchar(max); set @pids=''; set @pNames=''; with c...
一:如何开始 1:如果没有公众帐号,可以先申请一个测试帐号:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 2:登录之后界面是这样滴: 3:接下来,我需要准备自己的网站,然后发布自己的 URL。
首先,我们来看一段代码,如果觉得不甚明白的,则本文会对你有益: var player = function (e) { return (function f(m) { return m ? (function (n) { return $('#Player', n).
一:JQuery 对象和 Dom 对象 在使用 JQuery 过程中,我们一般(也是绝大多数情况下,除非我们使用了第二个框架)只有两类对象,即:JQuery 对象和 Dom 对象。Dom 对象指的是普通的 JavaScript 对象,而 JQuery 对象则是包装 Dom 对象后产生的对象。
一:文件结构 1:代码 2:编译后 二:IDE展示区 1处还有6个层,2处为代码和设计文件,3处是主类。 资源文件的位置如下: 三:数据交互 AS中代码: JS中代码: 更多需要注意的地方在这里: FlashVal : (以下参数...
考虑到 JS 中的错误可比服务器端的代码产生的错误要多得多,并且还难以发现及修正,所以 JS 代码必须有异常处理以及全局一场处理。 try { //这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行 } catch (e) { // 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。
在使用 JSON2.JS 文件的 JSON.parse(data) 方法时候,碰到了问题: throw new SyntaxError('JSON.parse'); 查询资料,大概意思如下: JSON.parse方法在遇到不可解析的字符串时,会抛出SyntaxError异常。
第一种方案(全文档): body { text-align: center; } body div { margin: 0 auto; } 第二种方案(某DIV): .
如果: public ContentResult GetPaper(string testId) { return ControllProctector.Do1(() => { var result = new UserPaperBll().
在 MVC 中,如果尝试如下的编码: public ActionResult TeacherInfo(string courseId) { var x = LearningBll.
使用 TransactionScope 的过程中,如果存在嵌套事务,比如, Bll 层使用了事务,而所调用的 Dal 内方法也使用了事务的话。假设我们吃掉了 Dal 的异常,那么,外部事务会不会成功? 测试代码如下: using(var ts = new TransactionScope()...
一:概述 1:想查看程序运行结果,又不想启动 VS 怎么办? 2:想测试下自己的 C# 能力,不使用 VS 的智能感知,怎么办? 那么,我们有一个选择,使用神器 LINQPad(http://www.linqpad.net/)。
一:频繁出现的代码可以使用委托类型的 AOP 类似以下代码在控制器中(在Domain中也有若干)重复出现: try { if (!string.IsNullOrEmpty(categoryId)) { var model = new ExerciseCategory(); model.
首先,我们明确几个基本概念:视频的文件格式、压缩格式、码率、分辨率, 视频的文件格式有:mkv,mp4,flv,wmv,rmvb等; 视频的压缩格式有:h.263,h.264,mpeg-2,rmvb等; 视频的码率:码率也叫比特率,表示经过压缩编码后的视音频数据每秒需要用多少个比特来表示,即把每秒显示的 图像进行压缩后的数据量,一般采用的单位是kbps即千位每秒。
Asp.Net 引擎可能是不错,但是它把程序员想的太笨,会自以为是做很多自动的 Encode 和 Decode,以下文举例: 如果客户端我们 post 了如下的数据, 但是你实际得到的是: 也就是说,默认的调用 Asp.Net 引擎提供给我们的方法: byte[] bytesToPost = httpLocalRequest.ContentEncoding.GetBytes(httpLocalRequest.Form.ToString()); 我们将会得到一个错误的结果。
如果查看别人对代码的修改,你可能会非常烦恼与在 Solution Explorer 中看历史版本看不全,如下: 实际上,你想看到的是对于整个解决方案,全部的历史版本,那应该跑去 Source Control Explorer 查看,同样点 View History,这回就会看到全部的签入记录,如下: Solution Explorer 的 ViewHistory 非常方便于对单个文件的历史查看,而如果想对全局有个更好的理解,则应该去 Source Control Explorer 使用 View History。
一:工具安装 Resharper 和 StyleCop 必须安装。 Resharper 的配置文件如下:Resharper.zip 请按如下步骤导入, 1: 2: 3: StyleCope 的配置文件如下:Settings.zip 请直接包含到项目中,如: (PS:从源码服务器上获取的解决方案,Leader 已经包含)。
一:The NPF driver isn’t running 这个错误是因为没有开启NPF服务造成的。 NPF即网络数据包过滤器(Netgroup Packet Filter,NPF)是Winpcap的核心部分,它是Winpcap完成困难工作的组件。
(function () { // 获取树的路径,如 组织分类 > YHBH > 湖南省卫生厅 > 湖南省长沙市 var getBreadcrumbs = function (a) { var node2 = $('#tt').
一:Class and private And public JS 中的类以 function 进行声明,同时 JS 也支持声明私有 private 和公有 public 成员,只不过跟 C# 不一样,它们不是使用这两个关键字实现的。
一:上传之 首先,你必然得有一个 file input,如下: 其次,让我们 upload,如下: $.ajaxFileUpload({ url: '@ViewBag.
1:合理安排每个CASE并检查每个人每天的工作进度和质量; 这会让一个庞大的工作,或者看上不可能完成的任务,变成可完成的。 2:警惕对立情绪,并寻找交接者; 永远无法控制所有成员对你或者对团队对公司是满意的,实际上,人类很脆弱,当你发现一个人不愿意干好手上工作的时候,寻找交接者比说服他更有效率。
一:跨库查询 Openrowset/opendatasource() is an ad-hoc method to access remote server's data. So, if you only need to access the remote server's data once...
var now = new Date(); timer = $.timer(timeout, function () { var sec_num = Math.ceil((now.getTime() - startTime.
1:清空数组最高效的做法 parentThis.PaperQuestionStrategiesList.length = 0; 2:push and pop parentThis.PaperQuestionStrategiesList.
无论是软件开发还是学习计划或者其它任何计划,我认为过于细的计划是空洞的且无必要的。 一:只定远景计划或者说战略性计划 应先制定一个远景计划:类似1年内开发完毕某某项目,其中每个月应该完成什么模块。
很有意思的一件事情,当我想要找 Xxtea 加解密算法的时候,发现了前同事(likui318)的代码,不妨分享出来。此代码满足: 1:Xxtea支持中文; 2:支持 JS 和 C# 加解密之间的互转; 一:C#部分 class XXTEA2 { public stat...
1:自定义列,包括 Group var head1Array = []; head1Array.push({ field: 'Id', title: 'xxxx', rowspan: 2 }); head1Array.