Posts Tagged ‘方法’

CSS清除浮动常用方法小结

星期三, 06月 4th, 2008

常用de清除浮动de方法有以下三种.
此为未清除浮动源相关代码,运行相关代码无法查看到父级元素浅黄色背景.
点击运行可以看到效果:
[Ctrl A 全选 提示:您可先修改部分相关代码,再按运行]
1、使用空标签清除浮动.我用了很久de一种方法,空标签可以是div标签,也可以是P标签.我习惯用<P>,够简短,也有很多人用<hr>,只是需要另外为其清除边框,但理论上可以是任何标签.这种方式是在需要清除浮动de父级元素内部de所有浮动元素后添加这样一个标签清楚浮动,并为其定义CSS相关代码:clear:both.此方法de弊端在于增加了无意义de结构元素.
点击运行可以看到效果:
[Ctrl A 全选 提示:您可先修改部分相关代码,再按运行]
2、使用overflow属性.此方法有效地解决了通过空标签元素清除浮动而不得不增加无意相关代码de弊端.使用该方法是只需在需要清除浮动de元素中定义CSS属性:overflow:auto,即可!”zoom:1″用于兼容IE6.
点击运行可以看到效果:
[Ctrl A 全选 提示:您可先修改部分相关代码,再按运行]
3、使用after伪对象清楚浮动.该方法只适用于非IE浏览器.具体写法可参照以下示例.使用中需注意以下几点.一、该方法中必须为需要清除浮动元素de伪对象中设置height:0,否则该元素会比实际高出若干像素;二、content属性是必须de,但其值可以为空,蓝色理想讨论该方法de时候content属性de值设为”.”,但我发现为空亦是可以de.
点击运行可以看到效果:
[Ctrl A 全选 提示:您可先修改部分相关代码,再按运行]
此三种方法皆有一定弊端,使用时应择优选择,比较之下第二种方法更为可取.以上方法,并非原创,皆来源于网络,在此小作整理,原作者保留所有权利.

定义标题的最好方法

星期三, 06月 4th, 2008

作者:阿宏 2005-4-15 20:45:18
原文:What is the Best Way to Mark up the Title of a Document?
说明:本文是 《Web Standards Solutions: The Markup and Style Handbook》一书中de一章.书号:ISBN:1590593812.我会陆续翻译此书中有价值de章节.
原作者:Dan Cederholm
翻译:阿宏
一个文档标题,最好de定义方法是什么?要回答这个问题,先设想我要在一个页面上定义文章de标题,通常我有三个方法来实现这个简单目de:

方法一: 有意义吗?
<span class=”heading”>文章标题</span>
虽然在某些情况下<span>会是一个方便de标签,但它并不能表达出标题de完整含义.采用这个方法de一个好处是,我可以对它附加一个CSS规则,分配其一个heading class,使其文字象标题一样显示.

.heading {
font-size: 24px;
font-weight: bold;
color: blue;
}
ok,现在所有de标题都用heading class标记成了大号de粗体字体,并且为蓝色.太棒了!但是这样做对吗?如果有人用一个不支持CSSde浏览器来观看,会怎样呢?

举个例子,如果我设置de这个外部样式表de规则不被老版本de浏览器支持,会怎样?又或者有视觉障碍de人用屏幕阅读器来阅读这个页面,又会怎样?一个访问者通过这些途径所看到(或听到)de应该和这个页面上正常de文本没有任何区别.

尽管class=”heading”为这个标签增加了一点意义,但<span>仍然只是一个普通de标签,可以被大多数浏览器de缺省样式所修改掉.

搜索引擎检索这个页面时会略过<span>标签,就好象它不存在一样,不会对其可能包含de关键字给于一点额外de重视.在后面我会更多de谈到搜索引擎和标题de关系.

最后,由于<span>标签是一个内嵌元素,我可能需要把它嵌套在一个额外de块级元素中,比如<p>标签或<div>标签,为de是使它能够形成单独de行,这会进一步被非必要de相关代码弄乱您de标签.而这些额外增加de标签却是必须de,这样才能使不支持CSSde浏览器显示出没有差别de文本.

方法二:<p>和<b>组合
<p><b>文章标题</b></p>
使用一个段落标签,将会给我带来块级de显示,<b>会把文本变成粗体.但是用这个方法标记一个重要de标题时,我面对de是同样无意义de结果.

不象方法A,<b>标签能在可视化de浏览器中把文字显示成粗体——甚至在不支持CSSde浏览器中.但是和<span>标签一样,搜索引擎也不会因为有一些东西在段落中被加粗了而给予更高de优先.

难以设计样式

用普通de<p>和<b>de组合,也带来了另一个缺憾——无法把这个标题设计成不同于其他段落de样式.我可能想用一个特别de样式来突出标题,来使页面内容更清晰更具结构,但是用这个方法只能使其显示成粗体.

方法三:样式加实质
<h1>文章标题</h1>
恩,多么好de标题定义.大多数de网页设计者对它都很熟悉.其实适当de使用它们,<Hn> 就能为页面内容提供灵活de、可索引de、以及可样式化de结构.

这也是聪明de定义方法,您会发现它很简单.不再需要额外de标签,您可以说,这仅仅比另外两个方法节省了一点点de字节,可以忽略不计,但节省一点是一点.

<h1>一直到<h6>,代表了标题de六个级别,从最重要de(<h1>)到最次要de(<h6>).他们本身就是块级de,不需要增加其它元素来使其单独成行.简单,有效——就是好工具.

轻松定制样式

因为我使用<h1>标签是唯一de,而<b>或<p>标签更适合使用在整个页面,所以我可以用各种各样deCSS方法来样式化.

更重要de是,尽管完全不用样式,一个标题标签也能明显de表示出一个标题!可视化de浏览器把 <h1>显示成更大de粗体.一个非样式化de页面将以被期望de那样显示文档结构,用适当de标题标签来传达意思.

屏幕阅读器、PDA、手机、以及可视化de和非可视化de浏览器都会明白,碰到一个标题标签时该做de事情,正确de处理,比页面上de普通文本更重视de来对待.而使用<span>标签,那些不支持CSSde浏览器就不会特别de对待它.

讨厌de默认样式

以往,由于浏览器默认de缺省值非常de丑陋,设计者们也许会避免完全de使用标题标签.或者,因为缺省值de巨大尺寸而避免使用<h1>或<h2>,取而代之de是用更高数值de标题标签来实现更小de尺寸.

然而,需要重点强调de是,我可以很简单de用CSS来改变这些标题标签——举个例子,一个< ;h1>并非一定是占满大半屏幕de巨大标版.在后面,我将证明用CSS来样式化标题标签是多么de简单,希望可以帮助您减轻巨大de恐惧.

对搜索引擎友好de

这是一个巨大de好处.搜索引擎喜欢标题标签.另一方面,一个<span>标签或者普通de加粗de段落标签却在意味着次要一点.适当de用<h1>到<h6>标记您de标题,只需要您de一点点努力,然而却让搜索引擎更容易de检索到您de页面,让人们最终能找到它们.

搜索引擎机器人会给予标题标签特别de关注——这是您可能放置一些关键词de地方.就象检索到 <title>和<meta>,它们会顺着标题标签往页面下面查找.如果您不使用这些标签,那么包含在里面de关键词将不会被认为是有价值de,从而被忽略掉.

所以只要付出一点点de努力,您就能增加人们基于页面de内容找到您de站点de可能性.听上去不错,不是吗?

关于标题de次序
在例子中,这个特别de标题是页面中最重要de,因为它是文档de标题.因此,我使用最重要de标题标签,<h1>.顺应W3Cde规范,一些人认为跳过数个标题级是个不好de使用.举个例子,想象我在下面de页面:

<h1>文章标题</h1>
我接下去de标题(如果不是用另一个<h1>重复de话)应该是<h2>,然后是<h3 >,等等.您也许不应该在<h1>后面跳过一级,直接跟上<h3>.我倾向于同意以上de观点,顺着行文保持级别de连续性,来构造一个排版结构.这样de话,给一个已经存在de页面添加标题和样式就更容易了,您会减少因使用超出de数字而导致de错误.

前面提到de,设计者也许会用<h4>来标签一个页面上最重要de标题,仅仅是因为它de缺省de字体尺寸不象<h1>那样令人生厌de巨大.但是记住,先结构,后设计.我总是能用CSS来把标题样式化成任何我喜欢de文字尺寸.

在DIV CSS排版中新闻列表的制作方法

星期三, 06月 4th, 2008

CSS相关代码:

.list{

margin: 0px 10px 20px;

text-align: left;

}

.list ul{

list-style-type: none;

margin: 0px;

padding: 0px;

}

.list li{

background: url(/news/images/line.gif) repeat-x bottom;

/*列表底部de虚线*/

width: 100%;

}

.list li a{

color: #777777;

display: block;

padding: 6px 0px 4px 15px;

background: url(/news/images/dot.gif) no-repeat 0 6px;

/*列表左边de箭头图片*/

}

.list li span{

float: right;/*使span元素浮动到右面*/

text-align: right;/*日期右对齐*/

}

.list li a:hover{

color: #336699;

background: url(/news/images/dot2.gif) repeat-x bottom;

}

注意:span一定要放在前面,反之会产生换行

<ul class=”list”>

<li><span>2005年5月30日 </span><a href=”#”>新闻标题01</a></li>

<li><span>2005年5月30日 </span><a href=”#”>新闻标题02</a></li>

<li><span>2005年5月30日 </span><a href=”#”>新闻标题03</a></li>

<li><span>2005年5月30日 </span><a href=”#”>新闻标题04</a></li>

</ul>

ASPX中的用户控件与ASP中的INCLUDE方法对比

星期二, 06月 3rd, 2008

在ASPde年代里,为了避免经常性重复de劳动,对一些功能相似de区域或者相关代码,经常作成一个文件,然后通过连接(直接连接或者虚拟连接)de方法引入到ASP网页文件之中,对于一个很大de引用了很多ASP文件就相当于一个文件被分成了很多块,彼此文件之间de数据是可以自由共享de(除了函数之中de数据).
ASPXde用户控件就与INCLUDE有很大de不同了,它de最大特点就是在于他是以包装好de对象de形式呈现,通过我de编程,可以将一个公用de事例抽象出来,将一些功能和方法总结出来,作成相应de函数和属性供外部de事件调用,实现完全de类化,最大程度de封装外层用户不需要了解de内部事实,使得其更加具有可维护性,也提高了数据de安全性,更利于程序de发布.
简单de东西好用,但自然也功能比较少,或者是很不完善de,我可以自由de将某个文件de包含到指定deASP文件之中,但是,由于彼此de数据是可以共享de,所以导致,文件de相互依赖性很高,降低了相关代码可读性,不利于系统de维护,同时,如果被INCLUDEde文件中如果有一个图片,并且被包含de文件与需要包含文件de文件不在同一个目录之下时,被包含de文件de图片de地址必须以需要包含文件de文件中能显示图片de地址为准,如/FILE/INDEX.ASP是主文件(需要包含文件de文件),而/FILE/INCLUDE/TITLE.ASP是被包含文件,而图片地址为/file/title.jpg此时就需要将TITLE.ASP中de图片地址改为title.jpg而不是../title.jpg,否则将无法在主文件中显示图片,超级链接也是同样de问题.
复杂deASPX固然解决了很多de问题,如能够在控件文件中自由de设置图片de地址,无须理会引用他de文件在什么目录之下,只要在控件文件中能显示出来de东西,被引用之后依然可以被使用,这使得用户制作de控件具有更多de可重用性,而不象ASP中,对于不同目录下de文件引用相同功能de文件时需要设置两个事实上相同但是图片或者超级链接de地址不同de文件.浪费资源,也使得维护费用更高.当然这些优点也使得文件编写起来也比较麻烦,对于分析上要求有更高de归纳能力,使得控件能更广泛de使用.

涉及网络编程时,需要用到的几个常用方法

星期二, 06月 3rd, 2008

涉及网络编程时,需要用到de几个常用方法.

1. 在ASP.NET中专用属性:
获取服务器电脑名:Page.Server.ManchineName
获取用户信息:Page.User
获取客户端电脑名:Page.Request.UserHostName
获取客户端电脑IP:Page.Request.UserHostAddress

2. 在网络编程中de通用方法:
获取当前电脑名:static System.Net.Dns.GetHostName()
根据电脑名取出全部IP地址:static System.Net.Dns.Resolve(电脑名).AddressList
也可根据IP地址取出电脑名:static System.Net.Dns.Resolve(IP地址).HostName

3. 系统环境类de通用属性:
当前电脑名:static System.Environment.MachineName
当前电脑所属网域:static System.Environment.UserDomainName
当前电脑用户:static System.Environment.UserName

调试ASP.NET应用程序的方法和技巧

星期二, 06月 3rd, 2008

以前使用ASP开发过Web应用程序de人员肯定知道调试Web应用程序是多么麻烦.在ASP中,调试是痛苦de,通常包括了使用Response.Write()方法输出变量de值.那么请问一下自己:您有多少次忘记了在布署应用程序之前删除了调试语句?
  随着.NET框架组件de出现这种情况发生了彻底de改变.在.NET中,您可以使用Visual Studio .NET中de调试程序跟踪整个Web应用程序de执行,或者使用System.Web.TraceContext名字空间中deTrace类.本文演示如何使用Trace类辅助您de调试工作.
  使用Trace类
  ASP.NET中包含了一个帮助跟踪应用程序信息流deTrace类.作为使用Response对象进行调试de代替,您现在可以使用Trace类打印出调试信息了.
  为了演示它de使用,我首先建立一个ASP.NET Web应用程序,并在默认deWebForm1上放置一个Button和一个ListBox控件(如图1所示).用三个项填充ListBox控件并把它deAutoPostBack属性设置为True.


图1.填充默认deWebForm1


  对于本文,我希望跟踪应用程序de执行流.首先,激活跟踪,页面指令要求含有Trace属性,它de值设置为True(切换到查看HTML源模式),如图2所示.


图2.激活跟踪


  下一步,我在Formdeload事件中插入Trace语句,这样我就知道是否发生了Postback.PostBack事件是ASP.NET中de最容易混乱de一个特性,它经常导致初用ASP.NETde开发者de失败.

Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
 ’此处放置初始化页面de用户相关代码
 Trace.Write(”Page loaded”)
 If Not IsPostBack Then
  Trace.Write(”Not in a postback”)
  ’ postback发生de时候执行一些操作
 Else
  Trace.Write(”In a postback”)
  ’ 执行一些操作
 End If
End Sub

  我同样想知道当ListBox数据项被选择de时候是否发生了postback:

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As _
System.Object, _
ByVal e As System.EventArgs) Handles _
 ListBox1.SelectedIndexChanged
 Trace.Write(”Listbox postback”)
End Sub

  当上面deASP.NET应用程序执行时,将显示下面de输出结果(图3所示):


图3.显示跟踪信息


  您可以发现,当第一次载入WebForm1de时候,您可以看到字符串”Page loaded”和”Not in a postback”.如果您点击WebForm1上de按钮,您可以看到图4所示de记录.与此类似,如果点击了ListBox,也会显示”Listbox postback”字符串.


图4.检查跟踪信息


  跟踪页面包含下面de部分(图3中没有显示所有de信息):

描述
请求细节 描述与请求相关de信息,例如对话ID、编码和请求de时间.
跟踪信息 包含当前运行de应用程序de详细信息.跟踪信息显示在这个部分中.
控件树 显示某个页面中控件de信息和Viewstate 隐藏字段de大小.
Cookie集合 显示页面和它de值设置decookie.
头集合 显示HTTP头信息,例如内容长度和用户代理.
窗体集合 显示某个页面中控件de名称和它们de值.
服务器变量 显示服务器端de环境变量.

  注意,我de跟踪信息显示在”跟踪信息段”de下面.如果要关闭跟踪,只需要简单地把页面指令中Tracede属性设置为False.没有必要删除应用程序中de跟踪指令,现在关闭调试仅仅是设置一个布尔值这么简单了.
  打开/关闭跟踪只是简单地修改页面指令中deTrace属性de值.您也可以使用Trace类编程关闭跟踪.Trace类de成员如下:

属性 描述
IsEnabled 表明是否激活对当前请求de跟踪.
TraceMode 设置跟踪模式:sortByCategory或sortByTime.

方法 描述
Warn 把跟踪信息显示为红色.
Write 写跟踪信息.

  要编程关闭跟踪,可以在WebForm1deload事件中使用下面de语句:

Trace.IsEnabled = false

  在我de例子中,跟踪信息没有很显目de显示,因此它被其它de跟踪信息掩埋了.Trace类deWarn()方法可以把跟踪信息打印为红色.因此不是这样编写相关代码:

Trace.Write(”Page loaded”)

  而是:

Trace.Warn(”Page loaded”)

  图5显示了Warn()方法用红色显示de调试信息.


图5.使用Warn()方法用红色显示跟踪信息


  对跟踪信息排序
  把多个跟踪语句放在一个应用程序中有时会显得杂乱.如果您de跟踪信息可以被分为不同de类别,那么跟踪就更容易了.Trace类允许我基于种类对跟踪信息进行分类和排序.
  下面de例子演示了如何对跟踪信息按类别进行分组:

Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
 Trace.TraceMode = TraceMode.SortByCategory
 ’此处放置初始化页面de用户相关代码
 Trace.Warn(”Page_Load”, “Page loaded”)
 If Not IsPostBack Then
  ’ 执行一些操作
  Trace.Warn(”Page_Load”, “Not in a postback”)
 Else
  Trace.Warn(”Page_Load”, “In a postback”)
 End If
End Sub
Private Sub ListBox1_SelectedIndexChanged(ByVal sender _
As System.Object, ByVal e As _
System.EventArgs) Handles _
 ListBox1.SelectedIndexChanged
 Trace.Warn(”ListBox”, “Listbox postback”)
End Sub

  执行这个例子de时候,将显示下面de调试信息,它根据类别分组了(图6所示):


图6.按类别排序


  让我分析上面de相关代码:

Trace.TraceMode = TraceMode.SortByCategory

  TraceMode属性设置了跟踪支持de模式:
  · SortByCategory:根据类型对跟踪信息排序 .
  · SortByTime: 根据执行次序对跟踪信息进行显示.
  因为我选择了根据类别排序模式,因此图7显示了信息按类别排序了.

Trace.Warn(”Page_Load”, “Page loaded”)

  Warn属性把消息显示为红色,注意这是个重载de方法.在例子中,我给它传递了两个参数.第一个输入类别(Category),第二个参数是为取得消息(Message)de.
  除了使用Trace类设置跟踪模式之外,您还可以使用页面指令指定跟踪模式:

<%@ Page Language=”vb” Trace=”true” TraceMode=”SortByCategory” AutoEventWireup=”false” Codebehind=”WebForm1.aspx.vb” Inherits=”WebApplication1.WebForm1″ %>

  应用程序跟踪
  最后一部分讨论了页面追踪,它追踪页面内de执行信息流.ASP.NET同时支持应用程序级de追踪,应用程序级de追踪在web.config文件中设置,在trace段下面:


  为了激活应用程序级追踪,设置下面de值:

属性 描述
Enabled True 激活或禁止应用程序级追踪.
requestLimit 10 设置追踪de请求de最大数量.
pageOutput False 在页面de末尾显示追踪信息.
traceMode sortByTime 追踪信息排序方式.
localOnly True 设置在非本地计算机上查看追踪浏览器de能力.

  当应用程序被载入后,追踪信息没有显示在页面上.为了查看追踪信息,我需要使用追踪查看器(trace.axd):


图7.应用程序级de追踪


  图7显示了应用程序de最后de六个请求de追踪信息.如果要查看每个请求de细节信息,点击每一行de”View Details”链接.
  注意,如果在web.config文件中trace被设置为true,并且在页面指令中它被设置为false,追踪将被禁止.
  总结
  ASP.NET使调试Web应用程序容易多了.现在您已经知道了如何使用追踪,试用一下,看看它把您de效率提高了多少!

第一次用.net2.0 LOGIN登陆控件的困惑和解决方法

星期二, 06月 3rd, 2008

1、我没有真正de服务器,我只是租用了.net2.0 SQLserver空间,SQL数据库名是固定de.
2、空间提供商不可能给我设定数据源或给您aspnetdb数据库权限.
3、我没有服务器de \Windows\Microsoft.Net\Framework\v2.x\Config 权限.

已知上面三点,如果直接把本地测试好de项目传到服务器肯定会出错(因为他默认是调用\Windows\Microsoft.Net\Framework\v2.x\Config ),我认为好de解决方法是把aspnetdb数据库内容全部导入自己de远程SQL数据库后,再定义项目deweb.config数据库连接字符串.
web.config
<?xml version=”1.0″?>

<!–
注意: 除了手动编辑此文件以外,您还可以使用
Web 管理工具来配置应用程序de设置.可以使用 Visual Studio 中de
“网站”->“Asp.Net 配置”选项.
设置和注释de完整列表在
machine.config.comments 中,该文件通常位于
\Windows\Microsoft.Net\Framework\v2.x\Config 中
–>
<configuration xmlns=”http://schemas.microsoft.com/.NetConfiguration/v2.0“>
<connectionStrings>

<!–定义数据库连接–>
<add name=”DbName” connectionString=”Persist Security Info=False;server=127.0.0.1;database=aspnetdb;uid=sa;pwd=123;pooling=true”/>
</connectionStrings>
<appSettings>
</appSettings>

<system.web>

<!–
connectionStringName 数据库连接.这个要在web.config设置
enablePasswordRetrieval 获得一个值,指示当前成员资格提供程序是否配置为允许用户检索其密码.
enablePasswordReset 获得一个值,指示当前成员资格提供程序是否配置为允许用户重置其密码.
requiresQuestionAndAnswer 获取一个值,该值指示默认成员资格提供程序是否要求用户在进行密码重置和检索时回答密码提示问题.
applicationName 获取或设置应用程序de名称.
requiresUniqueEmail 指示用户在创建用户时是否必须提供唯一de电子邮件地址值.
passwordFormat 指示在成员资格数据存储区中存储密码de格式.下面有详细说明
maxInvalidPasswordAttempts 获取锁定成员资格用户前允许de无效密码或无效密码提示问题答案尝试次数.
minRequiredPasswordLength 获取密码所要求de最小长度.
minRequiredNonalphanumericCharacters 获取有效密码中必须包含de最少特殊字符数.
passwordAttemptWindow 获取在锁定成员资格用户之前允许de最大无效密码或无效密码提示问题答案尝试次数de分钟数.

对PasswordFormat de详细说明
属性指示存储密码de格式.密码可以采用 Clear、Encrypted 和 Hashed 密码格式存储.Clear 密码以明文形式存储,这可以提高存储和检索密码de性能,但安全性较差,当数据源安全性受到威胁时此类密码很容易被读取.Encrypted 密码在存储时进行了加密,可以在比较或检索密码时进行解密.此类密码在存储和检索时需要进行额外de处理,但比较安全,在数据源de安全性受到威胁时不容易被获取.Hashed 密码在存储到数据库时使用单向哈希算法和随机生成de salt 值进行哈希处理.在验证某一密码时,将用数据库中de salt 值对该密码进行哈希计算以进行验证.无法检索哈希密码.
–>


<roleManager enabled=”true” />
<membership>
<providers>
<remove name=”AspNetSqlMembershipProvider”/>
<add name=”AspNetSqlMembershipProvider”
type=” System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”
connectionStringName=”DbName”
enablePasswordRetrieval=”false”
enablePasswordReset=”true”
requiresQuestionAndAnswer=”true”
applicationName=”/”
requiresUniqueEmail=”false”
passwordFormat=”Hashed”
maxInvalidPasswordAttempts=”5″
minRequiredPasswordLength=”6″
minRequiredNonalphanumericCharacters=”0″
passwordAttemptWindow=”10″
passwordStrengthRegularExpression=”" />
</providers>
</membership>


<!–
设置 compilation debug=”true” 可将调试符号插入
已编译de页面中.但由于这会
影响性能,因此只应在开发过程中设置
此值.

Visual Basic 选项:
设置 strict=”true” 将禁止所有会导致
数据丢失de类型转换.
设置 explicit=”true” 将强制声明所有变量.
–>
<compilation debug=”true” strict=”false” explicit=”true”/>
<pages>
<namespaces>
<clear/>
<add namespace=”System”/>
<add namespace=”System.Collections”/>
<add namespace=”System.Collections.Specialized”/>
<add namespace=”System.Configuration”/>
<add namespace=”System.Text”/>
<add namespace=”System.Text.RegularExpressions”/>
<add namespace=”System.Web”/>
<add namespace=”System.Web.Caching”/>
<add namespace=”System.Web.SessionState”/>
<add namespace=”System.Web.Security”/>
<add namespace=”System.Web.Profile”/>
<add namespace=”System.Web.UI”/>
<add namespace=”System.Web.UI.WebControls”/>
<add namespace=”System.Web.UI.WebControls.WebParts”/>
<add namespace=”System.Web.UI.HtmlControls”/>
</namespaces>
</pages>
<!–
通过 <authentication> 节可以配置 ASP.NET 使用de
安全身份验证模式,
以标识传入de用户.
–>
<authentication mode=”Forms” />
<!–
如果在执行请求de过程中出现未处理de错误,
则通过 <customErrors> 节可以配置相应de处理步骤.具体说来,
开发人员通过该节可以配置
要显示de html 错误页
以代替错误堆栈跟踪.

<customErrors mode=”RemoteOnly” defaultRedirect=”GenericErrorPage.htm”>
<error statusCode=”403″ redirect=”NoAccess.htm” />
<error statusCode=”404″ redirect=”FileNotFound.htm” />
</customErrors>
–>

</system.web>
</configuration>

注:membership节点de那个注释是转载de,忘了地址了.

ASP.NET技巧:数据岛出到Excel最为简易的方法

星期二, 06月 3rd, 2008

只需将ContentType 设置为 “application/vnd.ms-excel”,表示以Excel方式输出.
相关代码如下:
DataToExcel.aspx:
<%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”DataToExcel.aspx.cs” Inherits=”DataToExcel” %>

<html xmlns=”http://www.w3.org/1999/xhtml“>
<head runat=”server”>
<title>DataToExcel</title>
</head>
<body>
<form id=”form1″ runat=”server”>
<asp:GridView ID=”GridView1″ runat=”server”>
</asp:GridView>
</form>
</body>
</html>DataToExcel.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

public partial class DataToExcel : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
this.Response.ContentType = “application/vnd.ms-excel”;
string ConnStr = “server=localhost;uid=sa;pwd=;database=northwind”;
SqlConnection Conn = new SqlConnection(ConnStr);
Conn.Open();
string sqlcmd = “select lastname,firstname,title, address, city from employees”;
SqlCommand cmd = new SqlCommand(sqlcmd, Conn);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds);
this.GridView1.DataSource = ds.Tables[0].DefaultView;
this.GridView1.DataBind();
}
}
}

介绍几个ASP.NET中容易忽略但却很重要的方法函数

星期二, 06月 3rd, 2008

给大家介绍几个.NET中Path类de几个方法:

1. Path.combine(string, string)
根据给出de两个路径, 返回一个路径.
例如:
string CompletePath = System.IO.Path.Combine(@”c:\MyApp”, @”Images\skyline.jpg”);
将会返回一个全路径 c:\MyApp\Images\skyline.jpg
第一个参数中有无”\”结尾都可以.

2. Path.GetExtension(string)
返回给定文件路径de扩展名.例如:
string FileExtention = System.IO.Path.GetExtention(@”C:\MyApp\Images\skyline.jpg”);
将会返回 “jpg”

3. Path.GetFileName(string)
给出文件名de全路径,返回文件名(包括扩展名).例如:
string fileName = System.IO.Path.GetFileName(@”c:\MyApp\Images\skyline.jpg”);
将会返回”skyline.jpg”

ASP.NET2.0服务器控件之Render方法

星期二, 06月 3rd, 2008

  控件呈现是指向HTTP输出流中写入标记文本de过程.服务器通过HTTP输出流向客户端发送生成de标记文本,这些文本将会通过客户端浏览器转换为可视化de元素显示出来.使用控件呈现,开发人员可以将HTML标记、脚本相关代码、CSS样式表等等输入到客户端浏览器.实现服务器控件呈现主要有两种方式:一是Control类deRender方法,二是WebControldeRenderContents方法.本文重点介绍使用Control类deRender方法实现控件呈现de应用.
  使用HtmlTextWriter类
  Control类deRender方法主要用于实现控件呈现,其声明相关代码如下:
protected virtual void Render(HtmlTextWriter output)


  如上相关代码所示,Render方法de参数是一个HtmlTextWriter类型.为了更好de应用Render方法,读者应首先了解HtmlTextWriter类及其相关内容.
  根据MSDN2005de描述,HtmlTextWriter类用于将标记字符和文本写入到ASP.NET服务器控件输出流.此类提供了ASP.NET服务器控件在向客户端呈现标记时所使用de格式设置功能.为了实现类de功能,HtmlTextWriter类定义了多个字段、属性和方法.由于成员对象众多,本文只挑选了一些常用成员加以说明,同时,还将介绍一些ASP.NET 2.0de新增成员.
  常用成员对象包括:
  ·AddAttribute方法
  对于HtmlTextWriter对象通过对RenderBeginTag方法de后续调用创建de元素,向其开始标记中添加指定de标记属性和值.
  ·AddStyleAttribute方法
  对于 HtmlTextWriter 对象通过对 RenderBeginTag 方法de后续调用创建de元素,向其开始标记中添加标记样式属性.
  ·Write方法
  将指定数据类型连同任何挂起de制表符间距一起写入到输出流.
  ·WriteAttribute方法
  将标记属性及其值写入到输出流.
  ·WriteBeginTag方法
  任何制表符间距和指定标记元素de开始标记写入到输出流.
  ·WriteEndTag方法
  写入指定de标记元素de任何制表符间距和结束标记.
  ·Encoding属性
  获取 HtmlTextWriter 对象用于将内容写入页de编码.
  ·Indent属性
  获取或设置用以缩进每一行标记de开始位置de制表符位置数.
  ·NewLine属性
  获取或设置由 HtmlTextWriter 对象使用de行结束符字符串.
  对于初学者而言,建议重点掌握以上成员对象de应用.另外,ASP.NET 2.0还为HtmlTextWriter类新增了一些成员,这些成员包括:
  ·BeginRender方法
  通知 HtmlTextWriter 对象或派生类de对象,某个控件将会呈现.
  ·EndRender方法
  通知 HtmlTextWriter 对象或某个派生类de对象,某控件已完成呈现.
  ·IsValidFormAttribute方法
  检查一个属性以确保它可以在 <form> 标记元素de开始标记中呈现.
  ·WriteEncodedUrl方法
  对指定de URL 进行编码,然后将它写入到输出流.URL 可以包括参数.
  ·WriteEncodedText方法
  对请求de设备de指定文本进行编码,然后将其写入到输出流.
  ·WriteBreak方法
  将 <br /> 标记元素写入到输出流.

  使用Render方法实现控件呈现
  1、基础知识
  本文所讲解deRender方法隶属于System.Web.UI.Controls.Control类.该类是创建服务器控件de基类,很多控件类均继承自该类.在Control类中包括三个用于实现控件呈现de方法:Render、RenderChildren和RenderControl.它们都使用HtmlTextWriterde实例作为参数,它们允许为一个HtmlTextWriter对象提供服务器控件de内容,并将其内容封装至HTTP输出流中输出到客户端显示.下面简单对这三个方法进行简单介绍.
  (1) protected virtual void Render(HtmlTextWriter writer);
  该方法用于将服务器控件内容发送到提供deHtmlTextWriter对象,此对象编写将在客户端呈现de内容.在开发服务器控件时,可以重写此方法以呈现服务器控件.
  (2) protected virtual void RenderChildren(HtmlTextWriter writer);
  该方法用于将服务器控件子级de内容输出到提供deHtmlTextWriter对象,此对象编写将在客户端呈现de内容.该方法通知ASP.NET呈现页中de所有Active Server Pages相关代码.如果页上没有任何ASP相关代码,此方法将呈现服务器控件de所有子控件.
  (3) protected virtual void RenderControl(HtmlTextWriter writer);和protected void RenderControl (HtmlTextWriter writer,ControlAdapter adapter)
  RenderControl有两个重载方法,它们都用于将服务器控件de内容输出到所提供deHtmlTextWriter对象中.如果已启用跟踪功能,则存储有关控件de跟踪信息.如果服务器控件deVisible属性设置为true,该方法将确定是否启用页de跟踪功能.如果启用,它将存储与控件有关de跟踪信息,同时向页呈现服务器控件de内容.另外,前一个重载方式是ASP.NET 2.0从ASP.NET 1.0中继承而言,后一个重载方式是ASP.NET 2.0新增de.后者具体使用提供deControlAdapter对象将服务器控件内容输出到提供deHtmlTextWriter对象.其中参数adapter是ControlAdapter类型,它用于定义呈现deControlAdapter.当实现在各种设备和浏览器中运行de服务器控件时,该方法比较常用.
  以上3个方法看起来好像是独立de3个方法,然而,实际上它们之间存在密切de联系.读者可通过阅读以下示意性相关代码,从而理解它们之间de关系.

//RenderCotrol方法基本实现
public void RenderControl(HtmlTextWriter output)
{
 if(Visible)
 {
  Render(output);
 }
}
//Render方法基本实现
protected virtual void Render(HtmlTextWriter output)
{
 RenderChildren(output);
}
//RenderChildren方法基本实现
protected virtual void RenderChildren(HtmlTextWriter output)
{
 foreach(Control c in Controls)
 {
  c.RenderControl(output);
 }
}
  如上相关代码所示,其中列举了RenderControl、Render、RenderChildren方法de实现思路.显而易见de是,在控件呈现过程中,这三个方法都在起着作用,而且使用了一个简单de递归调用过程.大体而言,可以理解为:
  (1)页面框架建立一个HtmlTextWriter类de实例;
  (2)页面框架将这个实例对象传递给RenderControl方法;
  (3)RenderControl方法检查控件de可视属性Visible是否为true.如果为true,RenderControl方法将调用Render方法;如果为false,则不呈现该控件和其子控件;
  (4)Render方法执行默认实现,调用RenderChildren方法;
  (5)RenderChildren方法按照默认实现中de设定调用每个子控件deRenderControl方法;
  实际上,如果读者短时间内不能理解以上过程也没有很大de关系.对于初学者而言,关键是要记住最重要、最常用de是Render方法.控件开发者可以通过重写Render方法完成呈现控件de任务.
  2、示例应用
  上文介绍了使用Control类deRender方法实现控件呈现de基础知识.下面将通过一个典型示例,帮助读者初步理解Renderde使用方法.示例效果如图1所示.
按此在新窗口浏览图片
图1效果图
  如图1所示,该服务器控件呈现了一个超链接,并且设置了文本为红色.当用户单击红色文字时,页面将转向微软站点.当然,用户可以通过属性LinkUrl来设置超链接地址.
  下面列举了示例实现源相关代码.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace UsingRenderControl
{
 [DefaultProperty("LinkUrl")]
 [ToolboxData("<{0}:RenderControl runat=server></{0}:RenderControl>")]
 public class RenderControl : Control
 {
  // 实现LinkUrl
  [Bindable(true)]
  [Category("Appearance")]
  [DefaultValue("http://localhost/")]
  [Localizable(true)]
  public string LinkUrl
  {
   get { String s = (String)ViewState["LinkUrl"];
    return ((s == null) ? String.Empty : s);}
   set { ViewState["LinkUrl"] = value; }
  }
  // 重写Render方法
  protected override void Render(HtmlTextWriter writer)
  {
   writer.AddAttribute(HtmlTextWriterAttribute.Href, LinkUrl);
   writer.AddStyleAttribute(HtmlTextWriterStyle.Color, “red”);
   writer.RenderBeginTag(HtmlTextWriterTag.A);
   writer.Write(”浏览网站”);
   writer.RenderEndTag();
  }
 }
}
  如上相关代码实现了自定义服务器控件类RenderControl.该类从Control基类继承,具体实现了表示超链接地址deLinkUrl(默认值为http://localhost/),并重写了Render方法.在重写Renderde过程中,调用了一些HtmlTextWriter类成员,例如,Writer、AddAttribute、AddStyleAttribute、RenderBeginTag和RenderEndTag方法等.另外,可能开发人员在使用Writer方法过程中,需要呈现一个比较长de字符串.建议此时多多使用Writer方法,而不要使用字符串级联或者StringBuilder类de相关方法进行实现.因为,那样将会消耗大量de系统时间和内存,效率较低.

  可能有一些读者会问,如果将服务器控件呈现de多行相关代码de顺序变化一下,是否会有什么不同呢?例如,假设首先依次应用RenderBeginTag、Write、RenderEndTag方法,然后再调用AddAttribute和AddStyleAttribute方法,那么会显示相同de效果吗?答案是否定de.这里需要强调de是:在呈现控件de过程中,首先要定义服务器控件de属性和CSS样式等内容,然后再定义服务器控件de主体内容,这种顺序不能改变de.
  另外,如果读者感兴趣可以在相关代码中实现一个Text属性,用于获取或者设置控件所显示de文本.这样,在Render方法中,使用Write方法输出de”浏览网站”文字内容则可由Text属性代替.
  下面列举了为使用以上de自定义服务器控件,而创建deDefault.aspx文件源相关代码.

<%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”Default.aspx.cs” Inherits=”_Default” %>
<%@ Register TagPrefix=”Sample” Assembly=”UsingRenderControl” Namespace=”UsingRenderControl” %>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head runat=”server”>
<title>使用Render方法实现控件呈现</title>
</head>
<body>
<form id=”form1″ runat=”server”>
<div>
<Sample:RenderControl runat=”server” ID=”CustomerControl” LinkUrl=”http://www.microsoft.com/”>
</Sample:RenderControl>
</div>
</form>
</body>
</html>
  以上相关代码比较简单,其中主要声明了自定义服务器控件RenderControl,并设置其LinkUrl属性值为http://www.microsoft.com,即微软站点地址.
  当用户在浏览器中运行以上页面,并查看相关deHtml源文件时,可得到如下de相关代码:
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<title> 使用Render方法实现控件呈现</title>
</head>
<body>
<form name=”form1″ method=”post” action=”Default.aspx” id=”form1″>
<div>
<input type=”hidden” name=”__VIEWSTATE” id=”__VIEWSTATE” value=”/wEPDwUJNzMyMTY5NTU2ZGQQYrLd/G vm1h41r2CEkxID63o5g==” />
</div>
<div>
<a href=”http://www.microsoft.com/” style=”color:red;”>浏览网站</a>
</div>
</form>
</body>
</html>
  通过观察以上相关代码可知,自定义服务器控件RenderControl实际呈现de结果是粗体所示部分de相关代码,其最终呈现为一个表示超链接de<a>标记.
  小结
  本文首先介绍了HtmlTextWriter类de基本知识,然后讲解了使用Render方法实现控件呈现de应用.在随后de一篇文章中,笔者将说明另外一种实现控件呈现de方法.从服务器控件开发技术总体而言,控件呈现技术是开发过程中最为常用,也是最为简单de内容.建议读者能够熟练掌握其中de内容.