开发杂记:RequestValidationMode

by kevin 30. 八月 2013 13:56 >
碰到一个管理后台项目,使用的是Asp.net 2.0时候的WebForm,但项目已经升级到Asp.net 4.0了。 今天碰到一个小意外,测试那边报了一个HttpRequestValidationException,在.net 2.0时代,将页面的ValidateRequest设置为false,或者在Web.Config里面设置<pages validateRequest="false" />,升级到.net 4.0后,验证模式也已经升级了。所以如果采用默认的设置,就会报HttpRequestValidationException,解决的办法是,将RequestValidationMode设置为2.0,代码如下: 1: <system.web> 2: <compilation debug="true" targetFramework="4.0"/> 3: <httpRuntime requestValidationMode="2.0" /> 4: <pages validateRequest="false"></pages> 5: </system.web> 关于RequestValidationMode,有两个值,默认是4.0 4.0 (the default). The HttpRequest object internally sets a flag that indicates that request validation should be triggered whenever any HTTP request data is accessed. This guarantees that the request validation is triggered before data such as cookies and URLs are accessed during the request. The request validation settings of the pages element (if any) in the configuration file or of the @ Page directive in an individual page are ignored. 2.0. Request validation is enabled only for pages, not for all HTTP requests. In addition, the request validation settings of the pages element (if any) in the configuration file or of the @ Page directive in an individual page are used to determine which page requests to validate.

C#小技巧-持续更新

by kevin 29. 八月 2013 22:19 >
字符串转换为日期 1: DateTime.ParseExact(MYCulturDate, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture); 获取某个文件夹下的所有文件 1: Directory.GetFiles("Path", "*.*", SearchOption.AllDirectories)

开发杂记:C#压缩JPG文件

by kevin 20. 八月 2013 21:44 >
最近在开发65emall的时候,发现产品的缩略图每个都有几十KB,检查了下,发现,在生成缩略图的时候,代码里只是设置了InterpolationMode,如下 1: g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Low; 其实这样的压缩,非常有限,所以文件还是非常大。 其实,要真正压缩jpg文件,还是要降低图片的质量,这里我们设置了50%,结果图片大小缩小了80-90%。 具体的代码如下 1: private static ImageCodecInfo GetEncoder(ImageFormat format) 2: { 3: ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders(); 4: foreach (ImageCodecInfo codec in codecs) 5: { 6: if (codec.FormatID == format.Guid) 7: { 8: return codec; 9: } 10: } 11: return null; 12: } 13:  14: private static void CreateImage(int oldWidth, int oldHeight, int limitWidth, int limitHeight, 15: System.Drawing.Image oldImage, string path, string fileName) 16: { 17: if (!System.IO.Directory.Exists(path)) 18: { 19: System.IO.Directory.CreateDirectory(path); 20: } 21: int createWidth, createHeight; 22: ImageSize(oldWidth, oldHeight, limitWidth, limitHeight, out createWidth, out createHeight); 23:  24: System.Drawing.Bitmap createImage = new System.Drawing.Bitmap(createWidth, createHeight); 25: System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(createImage); 26: g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Low; 27: g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; 28: g.Clear(System.Drawing.Color.Transparent); 29: g.DrawImage(oldImage, new System.Drawing.Rectangle(0, 0, createWidth, createHeight), 30: new System.Drawing.Rectangle(0, 0, oldImage.Width, oldImage.Height), 31: System.Drawing.GraphicsUnit.Pixel); 32: ImageCodecInfo jgpEncoder = GetEncoder(ImageFormat.Jpeg); 33: System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality; 34: EncoderParameters myEncoderParameters = new EncoderParameters(1); 35: EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 50L); 36: myEncoderParameters.Param[0] = myEncoderParameter; 37: createImage.Save(path + fileName, jgpEncoder, myEncoderParameters); 38: g.Dispose(); 39: createImage.Dispose(); 40: } 参考资料: How to: Set JPEG Compression Level How to: Use Interpolation Mode to Control Image Quality During Scaling

开发杂记:给placeholder设置样式

by kevin 15. 八月 2013 13:23 >
目前,没有统一的CSS语法可以来设置placeholder的样式,但IE,Firefox, Chrome/Safari都提供了各自的语法,具体如下。 1: ::-webkit-input-placeholder { color:#f00; } 2: ::-moz-placeholder { color:#f00; } /* firefox 19+ */ 3: :-ms-input-placeholder { color:#f00; } /* ie */ 4: input:-moz-placeholder { color:#f00; } /* firefox */

开发杂记:DIV垂直居中

by kevin 23. 七月 2013 22:26 >
这个话题挺有意思的,网上给出了很多的解决方案,感觉只有一种方法比较实用。 1: <div style="width:150px; height:150px;display:table-cell; vertical-align:middle;"> 2: <div style="width:150px;"> 3: <div> 4: </div> 其实,如果不考虑IE,并不需要嵌在内部的div。 另外PS另外一个小技巧:img的等比例缩放大小。 1: <img style="max-height:150px; max-width:150px;" src="">

开发杂记:如何使用google字体

by kevin 26. 六月 2013 13:56 >
前段时间,65emall上请设计公司设计的活动页面使用了google字体,效果是挺好看的,问题是google字体只提供woff文件,所以在ie浏览器下无法正常浏览,要兼容ie的各个版本需要将woff文件转换成eot,tff等文件,找了很多个网站或是技术问题,或者是版权问题,都无法直接转换woff文件,最后在颠_颠帮助下找到了everythingfonts。问题就可以解决了。 1 将google字体下载下来 2 通过everythingfonts将woff文件转换成tff文件 3 再通过其他的在线字体转换网站转换成eot等文件格式 4 然后是@font-face来搞定   PS: 1 everythingfonts可能需要翻墙。 2 转换后的字体,字宽可能会不一样,可以使用font-weight来调整一下。 3 版权问题,谁要知道怎么处理,更我说一下。 4 http://www.zhuan-huan.com/font-converter.php 这里好像也可以转换,未验证。 实例下载

SQL Server 语法小技巧-持续更新

by kevin 20. 六月 2013 16:46 >
获取今天零点时间 1: DECLARE @Today DateTime 2:  3: SET @Today = DATEADD(dd, DATEDIFF(dd,0,GETDATE()), 0)   更好的支持模糊搜索 很多时候,我们会 LIKE 查询的做法是这样的。 1: select * from TableName where ColumnName LIKE '%Input%' 但如果上面的Input是这样的 keyword1 keyword2 ,那么数据库中包含keyword1 XXXXX keyword2 的记录就不会被查询出来,这里可以稍微的改进一下。 1: select * from TableName where ColumnName LIKE '%keyword1%keyword2%' 简单实用的技巧,另外还是要记得防止SQL注入。 多行合并为一行,类似string.join google了一下,基本上都说用 for xml path 1: SELECT OrderItemDesc FROM #OrderItem WHERE OrderId=O.OrderId FOR XML Path('') 如果OrderItemDesc中包含xml转义字符,会被转义,比如 “<” 转义为 “&lt” 所以要小加工一下 1: (SELECT OrderItemDesc FROM #OrderItem WHERE OrderId=O.OrderId FOR XML Path(''), type).value('.','nvarchar(max)')

fluentdata的ExpandoObject异常

by kevin 4. 六月 2013 21:42 >
现在开发的项目中使用fluentdata进行数据访问,简单易用,但是,也是有坑爹的bug。 先记录2个: 1 IStoredProcedureBuilderDynamic StoredProcedure(string storedProcedureName, ExpandoObject item) 参数类型明明是ExpandoObject,还是需要做一次显示转换。 A.  Bad 1: var command = DefaultContext.StoredProcedure("InsertSPName", Entity) 2: .AutoMap().ParameterOut("EntityId", DataTypes.Int32, 4); 3: command.Execute(); 4: return command.ParameterValue<int>("EntityId"); B.  OK 1: var command = DefaultContext.StoredProcedure("InsertSPName", (ExpandoObject)DanymicObject) 2: .AutoMap().ParameterOut("EntityId", DataTypes.Int32, 4); 3: command.Execute(); 4: return command.ParameterValue<int>("EntityId"); 2. IStoredProcedureBuilder Parameter(string name, object value); 参数类型是object , 但是如果传入的参数是ExpandoObject的一个属性,返回值就变成object了。需要将传入的参数显示转换成简单类型。 A. Bad 1: public int Update(dynamic entity) 2: { 3: IStoredProcedureBuilder iStoredProcedureBuilder = DefaultContext.StoredProcedure("EntityUpdate") 4: .Parameter("Title", entity.Title) 5: .Parameter("Entity_Id", entity.EntityId); 6: return iStoredProcedureBuilder.Execute(); 7: } B. OK 1: public int Update(dynamic entity) 2: { 3: IStoredProcedureBuilder iStoredProcedureBuilder = DefaultContext.StoredProcedure("EntityUpdate") 4: .Parameter("Title", entity.Title as string) 5: .Parameter("Entity_Id", (int)entity.EntityId); 6: return iStoredProcedureBuilder.Execute(); 7: }

开发杂记:chrome下只用做background的td标签width-height偏差

by kevin 3. 六月 2013 13:54 >
这几天,在写CSS的时候,碰到两个问题。 1. 对chrome下只用做background的td标签height设置为5px,但实际显示的效果是6px。 解决的方法是:在td内添加一个div,设置div的height为5px; 原始代码: 1: <td class="top" colspan="6"></td> 2: <style> 3: .top {width: 1183px; padding: 0px; height:5px; background-image: url(/Content/Image/UI/Order/myorder_top.png); background-repeat: no-repeat; } 4: </style>   改进后: 1: <td class="top" colspan="6"> 2: <div class="topContent"></div> 3: </td> 4: <style> 5: .top {width: 1183px; padding: 0px; height: 5px;} 6: #myOrder .item .top { height: 5px \9;} /*ie8*/ 7: .topContent {padding: 0px;height: 5px; background-image: url(/Content/Image/UI/Order/myorder_top.png); background-repeat: no-repeat; } 8: </style>   2. 对chrome下只用做background的td标签height设置为5px,但实际显示的效果是6px。 解决的方法是:利用webkit的css hack,将width设置为4px. 原始代码: 1: #myOrder .item .right { width: 5px; padding: 0px;background-image: url(/Content/Image/UI/Order/myorder_left.png); background-repeat: repeat-y;} 改进后: 1: #myOrder .item .right { width: 5px; padding: 0px;background-image: url(/Content/Image/UI/Order/myorder_left.png); background-repeat: repeat-y;} 2: @media screen and (-webkit-min-device-pixel-ratio:0){#myOrder .item .right{ width: 4px; } }   width偏差的原因:google了下,说是自动表格布局下,各个浏览器对最小单元格宽度(MCW)的表现不一样。猜想height偏差估计也是相同的道理。 参考资料: 自动表格布局:http://www.w3.org/TR/CSS21/tables.html#auto-table-layout width偏差:http://w3help.org/zh-cn/causes/RE8018          http://w3help.org/zh-cn/causes/RE9019

开发杂记:作为背景的div的高度宽度无法自适应

by kevin 27. 五月 2013 11:08 >
很多时候,我们希望给div加个圆角的边框,或者图片边框。很自然,我们想到九宫格的布局。这时,不应该考虑使用div来实现九宫格,而要使用table来实现,因为作为背景的div的高度宽度无法自适应。如下: auto width auto height   auto height   auto width