Edi Wang

Azure Developer, Microsoft MVP

All Posts


ASP.NET中使用Response方式下载文件

今天在修改我博客的文件管理功能,尝试解决一直以来的一个问题。即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. …

ASP.NET MIME

ASP.NET中用Ctrl+S触发按钮事件

这个也是上礼拜印度队友给我留的“作业”,今天搞定了。场景是某个页面,用户输入内容后,希望按Ctrl+S直接提交保存。也就是要用Ctrl+S去触发保存按钮的Click事件。然而在浏览器中,Ctrl+S默认是保存网页(Firefox下就是这样),所以需要写一个可以覆盖浏览器自身快捷键的脚本,去触发按钮事件。 我写了个最简单的Demo,效果如下:点击Button后,会显示一句话以及触发时间。现在需要用Ctrl+S来触发这个事件。注意,先得引入JQuery库。 第一种方法是: $(window).keypress(function (event) { if (!(event.which == 115 && event.ctrlKey) && !(event.which == 19)) { return true; } $('#Button1'). …

ASP.NET jQuery

SQL Server 2012入门图解(一):建表、备份、还原

本文很菜,旨在帮助0基础的初学者入门,高手勿看。关于SQL Server 2012的安装可以看我的这篇文章《SQL Server 2012 Express 安装图解》。 一、建立你的第一个数据库和表 例:建立一个用于描述一个学校学生情况的数据库。把它命名为School。并且要在School数据库下建立保存学生信息的表Student。在可视化界面下,我们通常这样操作。(本文是入门教程,不介绍如何用SQL语句建表) 1.    连接到本地数据库引擎后,右击数据库,选择【新建数据库】。 2.    在弹出的对话框中,把数据库名称设置为School,其他参数保留默认。 3.    刷新视图,可以看到School数据库已经建立成功了。 4.    下面我们要在这个数据库中新建一张表。展开School数据库,右击“表”,选择“新建表”。 5.    右边的窗口是表的可视化界面,在这里可以设计一 …

SQL Server Backup

C#读取Excel单元格中的日期

今天写一小程序用来分析某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 …

DateTime Excel

简单性能测试:使用Stopwatch测算程序执行时间

今天逛博客园,发现有人写了一篇关于List.FindAll()和For循环性能的文章,作者木有给出他的代码,因此不晓得他是怎么测时间的。我以前做这种很简单的性能测试往往都是定义两个datetime,dt1放在算法开始之前,dt2放在算法结束之后。最后用dt2-dt1计算出算法执行的时间。我相信许多人都是这么做的,并且我以前看MSDN Webcast的时候,连微软的MVP都是这样做的。所以我对datetime测时间的方法深信不疑。 不过在那片文章的回复中,我看到有人贴出了一段测试代码,其中用的是Stopwatch类。略有意思,于是研究了一下。 对Stopwatch的描述是这样的: Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间。 在典型的 Stopwatch 方案中,先调用 Start 方法,然后调用 Stop 方法,最后使用 Elapsed 属 …

Stopwatch

使用Visual Studio在VMWare虚拟机上远程调试程序

我用的是VMWare8,安装的时候附送了我一个Visual Studio的插件,似乎是跨机器调试程序用的。也就是在主机的VS上调试虚拟机中的程序,看着很牛逼,于是稍微研究了一下。下面是攻略: 我建了个很简单的控制台程序用来演示。断点加在了主函数入口。 第一步:启动虚拟机,我用的是一台XP的虚拟机,记得安装VMWare Tools,要调试.NET程序也当然要安装对应的.NET Framework。然后,去【控制面板\管理工具\本地安全设置\本地策略\安全选项】中,把网络访问:本地帐户的共享和安全模式改成“经典”,如图: 第二步:在虚拟机中增加一个和主机当前登录帐户一模一样的帐户。比如主机的帐户是Edi_Wang,密码是123456,那么虚拟机上也得建立同样的用户,并且放在管理员组,然后用这个帐户重新登录虚拟机。 第三步:打开虚拟机设置,在Options选项卡中,找到Shared …

Debug VMWare

Edit Class Template in Visual Studio 2010

在公司里写程序,往往都有规定的代码模板,比如要求每个类都有注释,说明开发者是谁,类的功能,以及其他信息。如果每次建一个类,手工去复制这些信息很麻烦,也容易遗漏。我们可以直接修改VS2010创建类的时候所用的模板,帮我们加上这些信息。 VS的模板位于这个路径:[你的VS安装目录]\Common7\IDE\ItemTemplatesCacheC# Class的模板在 CSharp\Code\[你安装的VS语言版本代码]\Class.zip 比如我的机器上,64位环境,英文版VS(1033),则我可以找到这个位置:C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ItemTemplatesCache\CSharp\Code\1033\Class.zip 我们修改这个压缩包里的Class.cs,并保存。重启VS后,就可以 …

Visual Studio Template

SQL Server 2012 Express 安装图解

前段时间微软发布了最新最犀利的SQL Server 2012,我第一时间下载回来尝鲜。在3台机器上实验安装了一下,都没有出问题。安装过程和以往类似,写这篇文章的目的是帮助刚接触SQL Server的初学者入门。高手请直接飘过。 首先,安装SQL Server需要注意的是它的版本。微软最新发布的是SQL Server 2012,但目前使用比较广泛的是2008版。对于初学者来说,安装哪个都一样。不过SQL Server 2008或2012都分别包含两种版本。超大的那个,4个多G的,是给企业用的。几百M的是给学生和开发者用的免费版,也就是Express版,它可以从微软的网站上直接下载。本文讲解的是SQL Server 2012 Express(似乎只有Windows7以上版本可以安装),读者可以寻找下面两个连接去下载: http://wwwco1vip.microsoft.com/ …

SQL Server

ASP.NET制作基于的XML导航栏

首先说明,本文为照顾刚入门的新手,有些地方可能会稍微说点基础的东西,高手可以直接忽略。 场景:以前做网站的时候,导航栏的链接都是写死在页面中的,这样不易与维护。于是今天写成了用XML配置的导航栏。用到了LINQ to XML。 先介绍一下功能: 储存导航栏信息的XML文件如下: Title是显示名称,Link是URL,OrderId表示排序的序位,Enabled为是否启用。这个菜单将最终被解析为一个ul列表: Shitter Shit Shitting Shitfully 然后我们来看看如何实现: 首先需要给菜单创建一个只包含属性的模型类,它的作用是成为对具体某一个菜单项的描述,系统中传递的将是这样一个模型: public class MenuItem { …

ASP.NET XML

ASP.NET:如何把ashx写到类库里并在页面上调用

最近在调整博客的架构,进一步把表现和业务分离,所以要把之前用ashx搞的那些Http Handler放到类库中。在类库中建Http Handler的操作很简单,就是添加一个普通的类,然后把之前ashx里的代码几乎一模一样贴到这个类中。但要注意命名空间和类名,因为之后我们会用到。 样例Handler: namespace EdiBlog.Core.Web.HttpHandlers { using System; using System.Web; public class ExampleHandler : IHttpHandler { public bool IsReusable { get { return false; } } public void …

ashx handler