Edi Wang

ASP.NET 62


ASP.NET List泛型分页代码

2011.11.13修正: 1. 改正页数计算方法,以前的计算公式遇到整除就会多一页 2. 重发关键代码,以前因为编辑器的原因,部分代码会被过滤 3. 新增“转到[]页”功能 我们以前做ASP.NET网站,通常是把DataSet绑定到显示控件上,再用各种手段进行分页,比如PagedDataSource。然而,如果你是从业务层取数据,通常是一个List,这个时候就不能用以往的方法分页了。 一种办法是用ObjectDataSource,绑定GridView、ListView就可以分页,但如果遇到DataList或Repeater,就得自己写分页了。下面是我昨天写的List泛型分页Demo,有图有真相: 下面发代码: List泛型分页通用类: /// /// 泛型分页类 /// /// 类型 public class ListPager : List {...

ASP.NET List 泛型 Paging

ASP.NET中URL重写和Session冲突的问题

今天在改博客系统的一个Bug的时候,程序里用了Session,结果一跑就报错:只有在配置文件或 Page 指令中将 enableSessionState 设置为 true  时,才能使用会话状态。还请确保在应用程序配置的  \\ 节中包括  System.Web.SessionStateMod 或自定义会话状态模块。然而用VS自带的Web Server调试一点问题都没有。唯独在IIS下跑的时候老报错,错误语句就是那行用了Session的程序。唯一的区别就是VS下调试时,URL没有重写。于是我回到IIS上,用完整的URL试了下,果然木有问题。我所使用的是URLRewriter.dll,似乎是当年微软提供的,经过一番查找,似乎有很多人和我有同样的问题,不管他们用的是不是URLRewriter.dll。奇怪的是,并不是每个版本的IIS都会丢Session。我本机和网站服务器用的是IIS7,...

ASP.NET Session URL Rewrite

ASP.NET用控件连接Access2010数据库报错的解决方法

今天想把网站的数据库换成2010(.accdb)格式的,但不知道主机服务商是否支持。于是想做个页面先测试一下。为了图方便,我用Access2010建立好测试用的数据库后,在VS里用拖DataSource控件的方法建了一个测试页面。VS里一切正常,可以识别数据库的内容。但网页一运行就报错:OleDbException (0x80004005): 不可识别的数据库格式。但通过编程的方式来指定provider就行。 经过一番研究发现,Access 2007或2010已经不能用AccessDataSource控件来连接了。必须使用SqlDataSource,但有些地方要做些改动: 1. 拖个SqlDataSource进来,然后选择配置数据源: 2.点击[新建连接]后,选择你的accdb数据库,数据源应该会自动适配为OLE DB。 3.选择高级,将Provider属性修改为Micro...

accdb ASP.NET

用Web.Config保存设置导致网站不定时重启的问题

前几天写了篇ASP.NET读写Web.Config,之后我确实用了文中的方法,重写了我网站的配置模块。结果上线之后,却发现网站时不时地重启,非常诡异。研究之后,我发现只要是对Web.Config做修改,就会使IIS重启网站,它不是立即重启的,似乎和GC一样有个阀值。然而我的设置必须保存在Web.Config中,这可肿么办?经过一番Google,终于找到了解决方案,现在似乎已经修复网站重启的问题了。方法是,把Web.Config的appSettings节点里的配置信息写到另一个文件中,然后设置appSetting节点的configSource属性,指向那个config文件即可。具体写法如下(摘自原作者博客):Web.config中appSettings节有个属性:configSource,这个属性可以指定一个存储appSettings的外部文件路径(只支持相对路径),而这个外部文件的修改是不...

Web.Config

ASP.NET读写Web.Config

先说下,我写的很多技术类文章都是面向初学者的,为了便于他们理解,我会写的尽量详细,包括很多最基础的操作步骤,并且有些说法可能不太严谨,高手请勿追究。如果写的太专业,不仅没人看我的博客,我还会被喷装B。请高手们原谅。以前我做网站设置模块的时候,总喜欢把设置都写在一个xml文件里,然后用程序去读写这个xml文件。虽然.NET对XML的支持很好(现在有Linq To XML了),并且我也使用了一个XML工具类,但总体来说,自己手动读写一个xml文件,还是有点蛋疼的。一不小心就容易出错。今天我突然想到,我们曾经无数次在Web.Config里读取过连接字符串,那么为何不把网站的设置信息也保存在Web.Config中呢?只要使用System.Configuration下的ConfigurationManager类就可以操作Web.Config了,微软都给我们封装好了!为了验证这一点的可行性,我写了一个...

ASP.NET Web.Config

ASP.NET GridView超链接列取值

场景:开发一个简单的Web文件管理功能,第一列是指向文件的超链接,最后一列放一个删除按钮。现在要求按删除按钮后,删除对应的文件。思路:获取当前行的第一列的值,然后调用File.Delete()方法。按照以往的写法,我们会在GridView的SelectedIndexChanged事件中,先找到当前行:int i = GridView1.SelectedIndex;然后通过 GridView1.Rows[i].Cells[0].Text来访问当前行第一列的数据。但是,如果不幸遇到超链接列,这种写法取出的缺是空串。我研究了好久,最后发现,HyperLink Field在GridView中要当作Web Control来处理。所以必须先转换为HyperLink,然后才能访问其Text属性。写法如下:((HyperLink)GridView1.Rows[i].Cells[0].Controls[0]...

ASP.NET GridView 超链接

ASP.NET Repeater控件绑定List<T>泛型的写法

我们在开发分成架构的Web应用程序时,常常把数据库中的记录放到一个List中,做到了良好的封装。调用业务逻辑的程序猿也无需知道库表结构就可以直接使用“Model.属性”来访问各个字段的数据了。但在做显示的时候,初学者可能会碰到一些问题。以往大家在显示控件(如Repeater)上绑定的都是DataSet,ASPX页面里写的是“”。那如何绑定一个List泛型呢?其实,Repeater控件是支持绑定到业务对象的,并且我们也不再用Eval表达式了。看一个例子: 后台代码: GeekStudio.BLL.Blog optBlog = new GeekStudio.BLL.Blog(); Repeater1.DataSource = optBlog.GetModelList(); Repeater1.DataBind(); 其中,GetModelList()返回的是一个List。我们可以...

ASP.NET List<T> Repeater 泛型 数据绑定

ASP.NET中GridView的多选、删除

我们在开发网站的时候,有个很常见的功能,就是要让GridView能够选择多项,然后一起删除。效果类似下面这张图,这是我网站后台管理页面中的一个GridView。其实制作这个效果不难,思路是:增加一个checkbox列,这个列的数据绑定到表的主键(比如Id),前台的代码可以在VS的可视化设计器中完成,你要做的仅仅只是增加一个CheckBox列。前台代码如下:...

ASP.NET GridView

让网站RSS源被浏览器自动识别的方法

最近本人在修改我的个人网站,其中一个目标就是要让IE/Firefox等支持RSS订阅的浏览器能自动找到我的RSS源(即让RSS按钮亮起)。查阅微软的资料后,发现方法很简单,只要一行代码就可以完成。 比如你的RSS源是:http://www.wyjexplorer.cn/RSS 那你只要在页面的节点中加入: 然后打开IE/Firefox再次访问这个页面。RSS按钮就会自动亮起!!!...

RSS 订阅 Browser

GridView生成序号

一个经常碰到的情况:GridView需要添加一个序号列,并且从1开始自动编号。而数据库中的ID往往是不连续的(会有记录被删除的情况),我们无法绑定现有字段作为编号。因此我们需要手动给GridView编号。 思路:在GridView每一行,既Row,被生成的时候,在序号单元格中输出该行的ID+1(第一行是从0开始编的,因此要+1) 实现: 首先,在ASPX页面中,需要手动给GridView添加一个BoundField。示例代码如下: 后台代码这样写:...

ASP.NET GridView 序号