ASP.NET
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/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. …
3/27/2012 11:07:43 PM
首先说明,本文为照顾刚入门的新手,有些地方可能会稍微说点基础的东西,高手可以直接忽略。
场景:以前做网站的时候,导航栏的链接都是写死在页面中的,这样不易与维护。于是今天写成了用XML配置的导航栏。用到了LINQ to XML。
先介绍一下功能:
储存导航栏信息的XML文件如下:
Title是显示名称,Link是URL,OrderId表示排序的序位,Enabled为是否启用。这个菜单将最终被解析为一个ul列表:
Shitter
Shit
Shitting
Shitfully
然后我们来看看如何实现:
首先需要给菜单创建一个只包含属性的模型类,它的作用是成为对具体某一个菜单项的描述,系统中传递的将是这样一个模型:
public class MenuItem
{ …
3/8/2012 8:26:15 AM
最近在调整博客的架构,进一步把表现和业务分离,所以要把之前用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 …
3/2/2012 4:10:28 AM
关于相对路径和绝对路径
相对路径转绝对路径
一般,我们在ASP.NET网站中往往需要把一个相对路径转化为绝对路径。通常是用Server.MapPath()方法。比如网站根目录下有个"Uploads"文件夹,那么我们调用Server.MapPath("Uploads")就会返回这个文件夹在服务器上的绝对路径,比如D:\Web1\Uploads。
另一种方法是使用HttpRuntime.AppDomainAppPath,它读取的就是当前网站的运行目录。
关于波浪线:
如果在路径前加上波浪线“~”则表示从网站根目录出发的相对路径。这在引用图片、CSS的时候比较常用。比如“~\Images”。并且这个路径同样可以传给Server.MapPath()用来返回绝对路径。
总是从网站跟目录出发:
在某些场合下,比如网站使用了URL重写组件 …
2/11/2012 10:05:34 AM
.NET 3.5中的DataPager碉堡了,可惜只支持ListView。传统的GridView和Repeater都无法直接使用DataPager分页。但我们如果稍加改造,就可以让Repeater和GridView支持DataPager分页。本网站的博客和留言板就是用Repeater+DataPager做的分页。
改造办法是自己写一个控件,让它继承GridView或Repeater,并实现IPageableItemContainer 接口。下面要发的是国外某高手写的代码,测试有效。具体使用的时候,要建一个类库项目,把代码编译成dll后,就可以添加到VS的工具箱里了!
一、自定义Repeater
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WYJ.Web.Controls
{
/// …
1/7/2012 9:05:09 AM
以前我们在.NET里动态输出图片,往往是建一个aspx,把里面的html代码都删光,然后在cs代码里用response输出一个图片类型的stream。之后指定Image控件的url为这个aspx就行。但是,更好的做法是用ashx。
先简单介绍一下ashx:
ashx是ASP.NET里的web handler,用来处理Http请求。因为它不是aspx,所以它无需走aspx的生成过程,避免了事件、控件树等的处理,因此性能比aspx好,并且编写ashx只需要关心request的处理,不用关心web界面上的表现,有点类似JavaEE里的Servlet。动态生成图片这样的事用ashx做再好不过啦!
以我网站Web App里二维码生成器为例。原先生成图片的aspx后台代码如下:
protected void Page_Load(object sender, EventArgs e)
{ …
12/27/2011 9:01:35 AM
哥最近准备把网站的登录模块重写,采用ASP.NET自带的Forms验证方式。一直觉得微软的登录肯定要比自己写程序判断Session神马的要完善。 我的场景是这样的: 一个普通的网站,分为前台和后台。前台是给Internet访客看的,无需登录。后台是给管理员发表文章和管理网站的,要求登录才能访问。 这样的网站我们通常这样设计目录结构: Web -----网站根目录 { Console ----- 后台管理入口 { Default.aspx ----- 登录页(一般叫做Login.aspx) Welcome.aspx ----- 欢迎页(登录成功就跳转到此页) ….aspx -----各种后台页面 } Default.aspx ----- 网站首页(无需登录就能看) …..aspx -----各种网站内容页 …
10/22/2011 1:28:23 AM
2011.11.13修正:
1. 改正页数计算方法,以前的计算公式遇到整除就会多一页
2. 重发关键代码,以前因为编辑器的原因,部分代码会被过滤
3. 新增“转到[]页”功能
我们以前做ASP.NET网站,通常是把DataSet绑定到显示控件上,再用各种手段进行分页,比如PagedDataSource。然而,如果你是从业务层取数据,通常是一个List,这个时候就不能用以往的方法分页了。
一种办法是用ObjectDataSource,绑定GridView、ListView就可以分页,但如果遇到DataList或Repeater,就得自己写分页了。下面是我昨天写的List泛型分页Demo,有图有真相:
下面发代码:
List泛型分页通用类:
///
/// 泛型分页类
///
/// 类型
public class ListPager : List
{ …
Edi Wang
.NET and Azure Developer