注释掉一段代码,使用ctrl+k,ctrl+c,取消注释使用ctrl+k,ctrl+u
这个快捷键在编辑c#代码时生成的是//注释,在编辑html代码时生成的是<!---->注释,可在编辑css文件时,却不能生成/**/格式的注释。哪位前辈知道生成/**/的快捷键?
posted @ 2008-06-25 16:28 inhesoft 阅读(269) | 评论 (0)编辑
PHP已经流行多年,但自己一直没有仔细研究过,这两天没事,想了解一下PHP到底是怎么回事,在网站找了一些资料,想运行一下,下载了xmpp开发试验环境,觉得太大了,就想起用IIS来作为web Server来支持PHP,这没什么新鲜的,网上有很多资料介绍如何配置,多数是介绍isapi的配置方式,我这里记录的是配置成fastcgi的运行方式,fastcgi可以在程序崩溃时不影响iis的运行。微软其实一直很重视把PHP引用windows平台,为了更好的支持PHP,还专门开发了FastCGI For IIS,以使IIS支持asp和asp.net以外的其它脚本语言,其中的重点,我觉得就是PHP,因为IIS网站的配置例子都是针对PHP的。下面简单记录了一下自己配置方法,很简单。
1、下载PHP,可以直接下载那个zip包,无需安装,直接解压到一个目录即可,我是解压到了 c:\php
2、从iis.net下载FastCGI 驱动程序,只有600K的一个msi文件,双击直接安装。
3、打开IIS的属性页,找到“主目录”,选择下面的“配置”,添加一个扩展名.php,可执行文件指向:C:\WINDOWS\system32\inetsrv\fcgiext.dll,这个文件就是安装fastcgi程序时装上的。
4、打开C:\WINDOWS\system32\inetsrv\fcgiext.ini文件,在最下载输入如下内容:

[Types]
php=c:\php\php-cgi.exe

[c:\php\php-cgi.exe]
QueueLength=999
MaxInstances=20
InstanceMaxRequests=500

其实就是指定php文件的具体的处理程序。
可以行,建立一个虚拟目录,把PHP程序拷贝进去,直接输入http://localhost/php/index.php就可以了。
当然,为了能够直接输入虚拟目录名来打开php文件,可以在站点属性的默认文档类型中,添加:index.php。

让IIS支持PHP还是很简单的,简单试了一下,速度还挺快的,有资料上说微软专门针对php做了优化。

posted @ 2008-06-23 09:42 inhesoft 阅读(125) | 评论 (0)编辑
做的一个项目,在IE下显示很好,在FireFox下显示很乱,仔细看了一下,仅仅是因为使用了内嵌样式表属性,style,只要把这些样式拿到单独的样式表文件中就可以了。
posted @ 2008-06-16 08:37 inhesoft 阅读(206) | 评论 (2)编辑
        Windows Vista 中默认的系统字体是微软雅黑,看上去眼睛的感觉还是比较舒服的,浏览网页时,如何让网页中的字体也使用这种字体呢?方法很简单,在IE的“Internet选项”的“常规”选项卡的最下边有“字体”和“辅助功能”两个按钮,“字体”按钮可以修改浏览器默认显示字体,只需修改里面的”网页字体“即可,对与网页中未指定字体,而只指定了字号的网页已经有效了,其实绝大多数网站CSS中只是指定了字号,并未指定具体的字体。
        对与指定字体的网站,也可以解决,在“辅助功能”中,可以忽略网页中指定的样式、颜色、字号。通过这样的修改,显示的效果会让眼睛感觉更轻松一些,特别是阅读大段文章时,可以忽略字号,然后把字体放大来显示。
        如果你觉得还不满意,甚至可以自己制作一个样式表,用这个样式表来覆盖掉原网页中指定的样式,这个好象比较困难,因为不能保证所有网站的设计都符合WEB标准(标准很重要啊!),对特定网站的浏览使用这种方法可能更现实一些。
       修改显示字体后,在园子里看文章,感觉眼睛舒服多了!对谷歌、百度、新浪、搜狐等网站的浏览效果都很好。
       这种方法对于Window XP +IE7同样有效,如果XP上没有微软雅黑字体,可以从网站下载。为了保证显示效果,需要在“控制面板”->“显示属性”->“外观”中点击”效果“按钮,把”使用下列方式使屏幕字体边缘平滑“打上勾,并选择”清晰“,就可以了。
posted @ 2008-05-19 09:15 inhesoft 阅读(163) | 评论 (0)编辑

    在使用AR过程中发现在查询数据时,有时会在后台出现数据库的update操作,对非字符串类型的字段,如果值为空,则更新为一个较小的值,如,int类型字段,自动更新为0,bit类型字段,自动更新为假。
    发现这个问题时,就分析是空属类型的问题,但又觉得不应该啊,update操作应该出现在对数据的更新或插入操作时,为什么会在查询时后台生成update语句来处理数据库呢?从网上查了一下资料,没有发现相关讨论,无意中发现了下面的这篇文章,觉得是类似的问题,只不过他遇到的是DateTime类型而已,就贴在了下面。
    经过把实体类的非字符串型的属性改为空属类型,就没有上述问题了。如:int?,bool?等。
    下面是看来的讨论类似问题的文章,关键的部分是最后一段。

NHibernate and the SqlTypeException

转自http://blog.jagregory.com/2007/12/18/nhibernate-and-the-sqltypeexception/

NHibernate is a wonderful piece of technology, I love it probably more than is reasonable for code. It does however, occasionally scare you with some seemingly odd behavior. I say seemingly, because every time I’ve had trouble it’s actually ended up being my own fault. This is one of those times.

Picture a simple page, with a DeleGrid control, being bound using NHiberate. Baring in mind how the DeleGrid works, two queries were being executed, one to return the first page of data and another to get the total row-count for the grid. These queries were identical apart from the paging in one, and the projection in the other.

Upon execution of the second query, NHibernate was throwing a SqlTypeException for a SqlDateTime overflow. SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM. This was pretty bizarre. Why on earth would the first query succeed (and bring back records, fully populated), but the same query again would die.

A good place to start for NHibernate debugging is always the logs, so I delved in. I discovered NHibernate was attempting to execute an update statement just before it tried the second query. It just kept getting stranger, why would a straightforward query cause an update?

I thought i’d investigate why the update statement was failing first, then I’d tackle the problem of why it was even updating at all. Looking at the query I identified the column that was causing the exception, it was (as expected) a DateTime column that was trying to be set to DateTime.MinValue. This exception is thrown because .Net and SQL Server have different ideas over what the minimum value for a DateTime should be.

Now, why would this column be being set at all? Well, it ends up that the column in the database was nullable, but the property in the object wasn’t. So because DateTime is a value type and cannot be set to null, NHibernate was populating it with the closest value to null as it could manage.

That was the key, as soon as I had that realisation, it was obvious what the problem was.

NHibernate knew that the database had a nullable column, but it had to manage with the non-nullable field on the object. When it came to run the second query, it noticed that the property wasn’t null as the mapping file said it should be, so it determined the value must have changed. It then attempted to persist those changes before executing the query!

To break it down

  1. Nullable column pulled into a non-nullable field forces NHibernate to create the smallest value it can.
  2. NHibernate then checks for any changes, expecting a null on that field but finding a value.
  3. Object now considered dirty because value has allegedly changed.
  4. NHibernate performs an update before it pulls back the data agian.

So the fix was simply to make the DateTime in the object a DateTime?, a nullable DateTime. That got rid of the false update, and fixed my queries. Simple when you know what the problem is.

So the moral of the story is: Make sure everything is in sync - schema, mappings and POCOs.

posted @ 2008-04-11 15:30 inhesoft 阅读(58) | 评论 (0)编辑

      用MonoRails做过一个项目,感觉MVC模式思路比较清晰,最近听说微软官方出了MVC,就下载了一份,是第二个预览版,还包含一份源码。恰好最近又有一个小项目,想尝试使用ASP.NET MVC来做,因为MR已经很久不更新了,从SVN上下来的代码老是有问题(可能是自己的问题),觉得还是用官方的好一些,况且微软还开放了源码,只是不允许自由发布,于是就学习和测试了一下,对测试中遇到的问题摘录如下,也许并不是问题,只是和MonoRails对比学习过程中的一些感觉。
      一、好的感觉
      1、整体感觉和MR类似,目录结构,控制器类的规则,视图目录规则等基本一致。
      2、视图的可编程性增强。MR的视图(NVelocity)编程能力较差,也是MVC的哲学思想决定的,而ASP.NET的MVC视图默认是ASPX格式的,编程能力肯定是没得说了,C#和类库均可用,确实方便了许多,但要控制烂用,大量的东西写在视图中,感觉就不好了,但对于开发来说,确实方便了许多。
      3、可以在视图中使用部分服务器控件,还可以绑定数据。偶而用一下未尝不可,和上一条类似,自己控制不要烂用,否则用WebForm好了。
      4、可以用Linq查询数据库和建立模型,对数据库的操作更直接一些了。
      5、视图文件的编写支持语法高亮和代码自动提示完成,爽多了。不知是不是我的版本有问题,偶而会失灵。我可是下的官方90天试用版。
      6、完整的IDE支持,新建项目,新建控制器、视图都有模板可用,MR的IDE支持不好。
      二、差的感觉
      1、视图aspx文件带差两个无用的附属文件.cs和.designer.cs,感觉很不好,目录中的文件很乱,是WebForm的遗留。
      2、Web.config文件中内容太多、太复杂,搞不懂都配置了些什么,容易出问题,好在是项目模板帮助配置好的,但要自己修改恐怕很难搞清楚。
      3、没有文档,资料少,网上就那么几篇文章,转来转去,很多写法和语法还是第一个预览版的,在第二版中已经不能用了。
      4、HtmlHelper太差了,比MR的完善程度要差很多,自己感觉MR的FormHelper很完美,基本上没有bug,用起来也很简单,但ASP.NET的HtmlHelper每一个都有很多的重载,参数搞得很复杂,有的重载之间还有冲突,特别是有一些很怪异的写法一时很让人摸不着头脑。
比如:Html.Select,我们需要设置的项目一般包括,文本字段和值字段,这两个是必需的。写法如下:

Html.Select("selectName",objDatasource,"textField","valueField",objValue)
      这个输出有几个问题:
      1、而输出时是把textField的值输出成select 的value属性,而valueField的内容输出成select的text属性,不知是我理解的有问题,还是参数命名问题,觉得很别扭。
      2、最后一个参数objValue,有两种重载形式,一种为object,另一种为IEnumerable类型,用来设定select标签的当前选定值。如果直接在这里写上对象的属性,而这个属性是字符串类型,就会出错,需要写成(object)objValue才能正常运行。很迷惑,不知是我哪里搞得不对,看了一下微软提供的源码,好象确实要这么写才行。有点搞不懂。
      3、其中有一个重载形式可以输出htmlAttributes,从而设置输出标签的格式、onclick事件等,是一个字典,以前用MR都是用这种方式来输出,感觉很方便,但在这里这个属的字典要求是RouteValueDictionary类型或Dictionary<string, object>类型,也就是值必需是object,如果用Dictionary<string, string>就会出错。
      4、多种重载形式华而不实啊,个人感觉只要有上面的基本形式,最后再加上一个htmlAttributes就OK了。
      5、强类型的视图写起来真是麻烦啊,哪一个类型错了都不行,感觉还不如MR的傻傻的视图感觉好。

      上面主要是写的视图(V)及helper的感觉,控制器(C)和MR非常类似,过滤器比MR的要好,MR的过滤器是类过滤器只能应用到控制器上,而ASP.NET MVC的过滤器是方法过滤器,控制器过滤是事件,写起来会更简洁一些。模型(M)原来是用ActiveRecord,现在是Linq,没有太大可比性,Linq的工具支持要比ActiveRecod上一个等级,也更灵活,哲学观点不一样,不可类比。没有测试Linq的数据库视图更新功能,这个也很重要,ActiveRecord中使用的方法是设定模型中哪些字段不更新和插入,这样生成的SQL中只包括一个表的字段,视图自然就可以更新了。

      UrlRotue在MR中没怎么用,感觉用起来太麻烦了。而ASP.NET MVC是以UrlRotue为基础的,是一等公民,不仅仅是看起来好看,更重要的是可重构,以URL暴露整个应用中可提供的服务是一种理念上的变化。由于原来没用过这个东东,所以还需要深入研究和学习。不过,微软一贯重视兼容性,这个也不例外,在mvc项目中即使不使用UrlRotue,也不影响开发和应用,特别是当一些rotue规则不匹配时,会自动生成原生格式的url,这个很不错,降低了入门门槛。

      总的感觉,这个版本基本可以达到实用的程度了,有些不完善的地方,只要小心地绕过,应该可以正常在项目中使用。但从第一版到第二版变化挺大的,估计第三版到beta版,再到正式版还会有较大的变化,会给项目的维护和升级带来一定的工作量。

(希望把这个发到首页原创区,聆听前辈的指教)
posted @ 2008-03-23 16:05 inhesoft 阅读(2709) | 评论 (8)编辑
        初学.net,经常在园子里潜水,聆听前辈们的指点教化,学.net是为了开发一个项目,仔细考虑一番后,决定使用castle的MR来做为开发框架,原因很简单,WebForm中各种各样的服务器控件搞得头晕脑涨,PostBack的模型让俺不知道程序到底在执行了什么,觉得还是使用简单的MVC模型更适合利用旧的WEB常识来完成这件工作,新的东西学起来费劲,于是选择了MR。
      由于是边学边开发,经常遇到一些问题,google一下,多数问题能从园子里找到答案,但也有些低级的问题始终找不到,因此想在这里记下对这些问题的处理,很零散,不是系统讲解。
      1、Nvelocity模板中取到空值时,会直接输出模板的内容,如$row.Email,如果Email为null,输出为$row.Email,一直使用#if($row.Email) $row.Email #end这种方法来处理,后来发现原来可以使用$!Row.Email这种语法,注意,是在$后加一个感叹号,这样在内容为空时,就不输出内容了。
      2、模板中可以直接使用.Net的类库及类的方法,如,要在页面中显示一个当前时间,可以直接写$DateTime.Now,就会显示当前的时间。
      3、输出乱码。有很多人介绍使用模板的属性文件,我反复试验,仍然乱码,最后发现其实根本不是这个原因,NVelocity是可以正常输出汉字的,只要编码是UTF8即可,不需要使用模板的初始化属性文件。我碰到的问题是由于模板、layouts两个文件的编码方式不致造成的,.net的默认编码是utf-8,只要所有文件的保存格式都统一为utf-8,并且去掉关于游览器页面语言控制的代码,就可以保证输出不乱码了。而网上下载的例子Layouts中文件的默认编码不是UTF8。
     4、在#foreach输出的表格中增加序号列。#foreach有一个计数变量,名字叫$velocityCount,只要输出为个变量就可以了。
     5、输出斑马线型表格,即隔行变色。使用如下代码就可以简单实现了
#foreach($item in $items) 
   <tr class="#if($velocityCount % 2 == 0) css1 #else css2 #end"
>
      <td>列一</td>
      <td>列二</td> 
   </tr>
 
#end
 
      6、控制器自动绑定参数问题
      MR的SmartController可以自动把客户端提交的参数绑定到控制器的方法参数上,唯一的要求是名称相同。但这也带来了一些问题。首先客户端提交的数据会来源于以下几个方面:Cookies、Form、QueryString、Header等。如果这几个来源的变量定名重名,会绑定哪个来源的参数呢?我发现如果Cookies和Form中的变量重名时,会自动把两个参数组合成一个数组来进行绑定,因此有可能会出现绑定错误,其它情况没有测试,所以建议仔细考虑Cookies中的变量名称,不要和Form中的变量重名,否则出现问题很难测试发现。
      随时发现的问题会及时补充上
      希望与各位前辈们交流学习
posted @ 2008-03-08 08:46 inhesoft 阅读(44) | 评论 (0)编辑

需要一个简单的验证身份证号的正则表达式,从网上查了很多,都有问题,主要是只要超过15位,都能够通过,于是自己查了半天手册,写了下面这个式子,能够满足简单的要求:
1、15位或18位,如果是15位,必需全是数字。
2、如果是18位,最后一位可以是数字或字母Xx,其余必需是数字。

/^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$/

从这个表达式想到的:
1、正则表达式首先是要通过正确的
2、限制不正确
3、可以不限制其中的某此规则,但一定要让正确的先通过。

posted @ 2007-12-01 14:38 inhesoft 阅读(299) | 评论 (1)编辑