All Posts
6/24/2012 12:17:22 AM
昨天在码页面的时候手写了一次AJAX,蛋都碎了,顺便发现了一个问题。我在ajax的脚本里检查http的返回状态是不是200OK以此来判断ajax是否执行成功。结果发现网站里所有的404、500页面均返回200OK,我蛋都碎了。用Firebug检查了一下,确实如此。这是自定义错误页的问题。如果用了html静态页作为错误页,比如404.html,通常我们的web.config里会这样写: 这段配置是给IIS7的,以往写在customError里,其实问题是一样会出现的。这样写的问题就在于,如果遇到了404错误,它确实会返回我们的404.html,但状态码却不是404。这样搜索引擎会认为这是一个网站中已存在的页面并收入索引,如果被人搜到,搜索预览里会直接显示我们错误页的内容,非常傻逼,会被人笑了。不信可以用firebug检查一下: 而正确的结果应该是返回404状态 …
6/9/2012 12:29:47 AM
昨天一个同学让我帮忙写个小工具,读一个Excel,只读B列的内容。我拿C#写了一个.NET4的winform程序。虽然简单,但有很多可圈可点的地方,因此撰写本文以警后人。 那个Excel是2010格式的,所以我们先要安装AccessDatabaseEngine,下载地址如下: http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe 这样程序读取Excel的时候就不会抛出OleDb驱动未注册的异常了。 我们先看看Excel文件,格式很简单: 我们需要读的,是B列除标题以外的内容。即B2到B6的内容,观察到它是字符串,所以程序里要作为string读取。 程序界面设计如下,点击ReadExcel后,会将B列的内容显示到listBox1里: …
6/6/2012 5:26:41 AM
最近在研究Razor和MVC,打算逐步把博客用Razor重写一边。今天一上手就碰到个蛋碎的问题。不管是在MVC应用程序,还是传统的WebForm项目中添加Razor页(既.cshtml类型的页面),就会导致自定义的Membership Provider失效。如果去掉Membership的配置则一切正常。 具体问题表现在有两个地方报错: 1. 运行时报错:Parser Error Message: Default Membership Provider could not be found. 2. 编译时报错:Error 58 The pre-application start initialization method Start on type System.Web.WebPages.Deployment.PreApplicationStartCode threw an …
6/4/2012 11:16:36 AM
本人出于兴趣驱使,从初中就开始研究计算机及编程,但我不是神童,我没有写过9000个软件,也没有90天写过40w行代码,我只是自认为对编程稍有门路罢了。如今快毕业了,在一家挨踢企业实习。在学习的道路上经历了很多,也感悟了很多——编程以外的道理。有些现象让我看在眼里,疼在蛋上。因此我决定撰文,旨在引导编程初学者一个正确的学习方式,帮助他们少走弯路。本文适合大一新生,以及对编程有兴趣的同学阅读。如有意见,欢迎到我邮箱拍砖。edi.wang@outlook.com 你为什么要编程 兴趣第一 我必须要说的是,据我观察,以及自身体会发现,要想学好编程,最好的前提条件就是兴趣。但不是每个学编程的人对此都有兴趣,并且,要让一个没有心思研究编程的人静下心来学习这门需要大量时间和精力才能入门的学科,是相当难办的。我的重点不在如何教你去培养兴趣,我不是教育砖家。我要说明的是,如果你有兴趣,那恭喜你,你一定可以学 …
5/23/2012 1:41:32 AM
最近在搞博客搜索框的自动完成功能,用的是JQuery UI里的autocomplete插件。插件的数据源是用AJAX调用一个WebService,网站后台有个标签库,WebService返回的是符合条件的标签。最终效果如下: 我们先来看WebService的代码,方法很简单: [WebMethod] public List GetAllTagsForAutoComplete(string tagName) { return optTag.GetModelList().Where(p => p.Name.ToLower().StartsWith(tagName.ToLower())).ToList(); } 这个方法的作用是根据输入的内容,检索所有以tagName开头的标签。我没有返回全部标签,是因为autocomplete插件的默认行为不符合我的需求。在默认情况下,如果我输入 …
5/22/2012 6:42:31 AM
这几天在研究JQuery和WebService,被泛型返回类型搞死了。查了很多资料做实验终于搞定了。网上很多垃圾文章的作者都不亲手实验就到处拼凑把东西发上来,太不负责了。下面我发的是100%可用的,经过亲手实验的代码。 首先在WebService上要注意一点,一定记得把[System.Web.Script.Services.ScriptService]这行取消注释,这样脚本才可以调用到WebService。如图: 我用来测试的是我网站的友情链接列表,其WebService方法如下: [WebMethod] public List GetFriendLinks() { return new EdiBlog.Core.FriendLink().GetModelList(); } 经过测试,在浏览器中用GET访问是会爆掉的,所以我们用POST方法去调用。在默认的IIS和ASP. …
5/18/2012 2:42:53 AM
今天GET一个项目文件的时候爆了,TFS说不允许路径长度超过256个字符。尼玛如此坑爹的限制,用户体验实在不好。无奈只能换个路径了。但显示路径的地方直接点击,是打开文件夹,而没有更改路径。尼玛研究了好久这个坑爹设置终于搞定了。这什么用户体验! 1. 在Workspace的下拉列表里,选择Workspaces... 2. 在弹出的对话框中选择Edit 3. 然后,就可以更改Local Folder的位置了 4. 最后,系统会建议你GET一下,于是重新GET就好了 关于TFS命名限制的描述可以在MSDN里找到: http://msdn.microsoft.com/zh-cn/library/aa980550%28v=vs.100%29.aspx
5/3/2012 2:59:16 AM
今天在修改我博客的文件管理功能,尝试解决一直以来的一个问题。即IIS中没有注册MIME映射的文件类型,是无法直接用Http Get方式下载的,也就是不能点击超链接直接转向文件位置。比如7z压缩包,如果直接下载,会是这个样子: 后来我想到了以前Gridview输出Excel的方式,是通过Response传输字节流的。稍微查阅了一下,发现ASP.NET的Response对象现在有了一个新的方法:TransmitFile(),不过它在MSDN上的描述不是很详细。 具体做法是这样的: Response.ContentType = "application/x-compress"; Response.AddHeader("Content-Disposition", string.Format("attachment;filename=要输出的文件名")); Response. …
4/25/2012 8:15:02 AM
今天写一小程序用来分析某Excel报表,结果在处理日期的时候蛋疼了。 原Excel是这样的: Excel加载到DataTable以后,日期都变成了这个样子: 看起来很像某偏移量。当然也有一部分日期是正常的: 我尝试用DateTime.Parse直接匹配,结果爆掉了。于是查了下MSDN找到了正确的办法:DateTime.FromOADate(double d) 方法: d 参数是一个双精度浮点数字,它将日期表示为基础日期(1899 年 12 月 30 日午夜)之前或之后的天数。 d 的符号和整数部分将日期编码为相对于 1899 年 12 月 30 日的正负日偏移量,而 d 的小数部分的绝对值将当天的时间编码为相对于午夜的小数日偏移量。d 必须为负 657435.0 到正 2958466.0 之间的值。 根据我的Excel,我封装了一下转换函数,如下: private DateTime …
4/21/2012 2:20:15 AM
我用的是VMWare8,安装的时候附送了我一个Visual Studio的插件,似乎是跨机器调试程序用的。也就是在主机的VS上调试虚拟机中的程序,看着很牛逼,于是稍微研究了一下。下面是攻略: 我建了个很简单的控制台程序用来演示。断点加在了主函数入口。 第一步:启动虚拟机,我用的是一台XP的虚拟机,记得安装VMWare Tools,要调试.NET程序也当然要安装对应的.NET Framework。然后,去【控制面板\管理工具\本地安全设置\本地策略\安全选项】中,把网络访问:本地帐户的共享和安全模式改成“经典”,如图: 第二步:在虚拟机中增加一个和主机当前登录帐户一模一样的帐户。比如主机的帐户是Edi_Wang,密码是123456,那么虚拟机上也得建立同样的用户,并且放在管理员组,然后用这个帐户重新登录虚拟机。 第三步:打开虚拟机设置,在Options选项卡中,找到Shared …
Edi Wang
.NET and Azure Developer