Posts Tagged ‘AS’
星期三, 06月 4th, 2008
我是这样来做DIV布局相关代码de.不知道说de清楚不清楚,凑和看吧 我de想法是未来能这样:用标准件de方式来组装网页DIV布局 我把class分为2种,布局class,风格class,布局class是骨架,风格class是衣服 举个例子: 比如布局中de左栏 首先它de属性有:是左栏,宽度,背景颜色,字体颜色等 1.首先会定义一个class,比如:.layout,主要用来控制页面整个de大小 .layout{width:98%;margin:0 auto;text-align:left;} 2.然后会定义3个基本布局Class(l,m,r) .l{float:left} .m{width:auto} .r{float:right} 我把2栏布局也归类于3栏布局,因为3栏布局中,左右栏de宽度分别为0de时候,3栏就变成了2栏. 我写基本布局相关代码de时候,最好还是写成3栏格式. 3.对应布局Class,定义需要de风格Class,比如宽度,高度,背景颜色等等这些都属于风格元素 .class_l{background:#ff0;margin-right: -150px;width:150px;} .class_m{background:#f00;margin:0 140px 0 150px;} .class_r{background:#00f;margin-left: -140px;width:140px;} 布局class只有一套,风格class可以定义很多. 比如,要中栏里面在做一个小de2栏布局 就可以再定义一个风格class .mid_l{background:#ff0;margin-right: -100px;width:100px;} .mid_m{background:#f00;margin:0 0 0 100px;} 4.将布局class和风格class结合起来,在相关代码这样引用 <div class=”l class_l”></div> <div class=”l mid_l”></div> 将2个class都引用,中间用空格隔开,前面de是布局class,后面de是风格class,后面还可以继续空格引用,如果需要再特殊定义,您可以给这个div取一个id来定义. 其他de一些常用de风格class也可以写成通用de,比如隐含可以定义为 .hide{display:none} 然后需要de时候,class=”xxx hide”来引用,很方便. 点击运行可以看到效果:
Here There Right
Middle Here1 There1
[Ctrl A 全选 提示:您可先修改部分相关代码,再按运行]
Tags: AS , cl , la , ss , s来 , 合C , 完成 , 局风 , 布局 , 成网 , 来完 , 格 , 组合 , 网页 , 页布 , 风格 Posted in HTML/CSS | No Comments »
星期二, 06月 3rd, 2008
1.给数据库语句参数传递
向数据库操作语句传递参数可以通过存储过程实现,这里给出另外两种简便易捷de方法:
可以在C#中通过字符串操作将参数直接传入SQL语句变量中,例如:
string s=”Davolio”;
string sql= “select * from employees where LastName=” “‘” s “‘”
相当于写入SQL语句:
select * from employees where LastName=’Davolio’ 也可以通过thisCommand.Parameters.Add()方法实现,如下所示:
string s=”Davolio”;
SqlConnection thisConnection=new SqlConnection
(”Data Source=(local);Initial Catalog=Northwind;UID=sa;PWD=”);
thisConnection.Open ();
SqlCommand thisCommand=thisConnection.CreateCommand ();
thisCommand.CommandText =
” select * from employees where LastName=@charname “;
thisCommand.Parameters.Add(”@charname”,s);
可以看到,字符串s将参数“Ddbolio”传递给数据库操作语句中de参数charname.
2.将数据库中不同表内de数据读入到数据集DataSet中
SqlDataAdapterdeFill方法可以填充已知数据集,并且为每个填充项创建一个临时表,可以通过对该表de访问来读取数据集中de相关数据.其相关操作如下所示:
SqlConnection thisConnection=new SqlConnection
(”Data Source=(local);Initial Catalog=Northwind;UID=sa;PWD=”);
try
{
thisConnection.Open ();
}
catch(Exception ex)
{
thisConnection.Close ();
}
string sql1=”select * from employees”;
string sql2=”select * from Customers”;
SqlDataAdapter sda=new SqlDataAdapter(sql1,thisConnection);
DataSet ds= new DataSet();
sda.Fill(ds,”myemployees”);
sda.Dispose();
SqlDataAdapter sda1=new SqlDataAdapter(sql2,thisConnection);
sda1.Fill(ds,”myCustomers”);
sda1.Dispose();
string t1=ds.Tables["myemployees"].Rows[0]["Hiredate"].ToString();
string t2=ds.Tables["myCustomers"].Rows[0]["ContactTitle"].ToString();
Page.RegisterStartupScript(”aa”,”<script language=javascript>alert(’t1=” t1 “,t2=” t2 “‘);</script>”);
可以看到,在数据集ds中新生成了两个临时表“myemployees”和“myCustomers”.为验证这两个表中数据确实已读入数据集ds中,通过数据读取操作将表“myemployees”中对应于属性“Hiredate”de第一行赋值给字符型变量t1,将表“myCustomers”中对应于属性“ContactTitle”de第一行赋值给字符型变量t2,并通过JavaStript函数“alert()”将这些变量显示到弹出窗口中.Page.RegisterStartupScript方法用于发出客户端脚本块,其第一个参数为标志位,用户可以任意选取,第二个参数为JavaScript脚本,这里alert函数用来弹出MessageBox对话框,我将参数t1和t2传入该脚本中,使其在MessageBox中显示出来.
ps:由于网络速度太慢,不能将相关de显示图表传到服务器,真一大遗憾.还有不知道编写相关代码de样式和格式,使得给出de相关代码显得很零乱.
Tags: AS , er , ET , lS , ne , PN , QL , rv , r数 , Se , SP , SQ , t中 , ve , 一些 , 中操 , 些小 , 作s , 在A , 小技 , 巧 , 库的 , 技巧 , 据库 , 操作 , 数据 , 的一 Posted in ASP.NET | No Comments »
星期二, 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使用.
Tags: AS , cl , de , E方 , in , lU , nc , PX , P中 , SP , ud , X中 , 与A , 中的 , 件与 , 对比 , 户控 , 控件 , 方法 , 比 , 法对 , 用户 , 的I , 的用 Posted in ASP.NET | No Comments »
星期二, 06月 3rd, 2008
今天在做东西de时候,发现一个很奇怪de问题,数据库(SqlServer)中de字段设置de类型为ntext,但是保存de数据总是很短,开始以为在程序de某段设置了长度限制,在设置了断点跟踪调试发现穿递de数据很正常,但是在执行了存储操作以后保存de内容总是很短,数了数保存de字符个数为16个,数据库中设置de该字段类型ntextde长度也为16,于是想是不是数据库debug,就在查询分析器里写insert语句进行测试,结果发现保存de内容很正常,这样问题肯定在程序当中,最后检查到在构造SqlCommand命令对象de参数对象SqlParameter时指定de参数类型为ntext并且指定了其长度为16,写法如下
SqlParameter[] parms = new SqlParameter[] { new SqlParameter(TEMPLATEID, SqlDbType.Int), new SqlParameter(”@Content”, SqlDbType.NText,16) };
把长度de限制去掉,再一测试,一切OK,呵呵,看来好多东西de概念不是很清楚是很容易造成麻烦问题de,希望这个教训能给我以后也遇到类似问题de朋友一点提示.
Tags: AS , ET , ne , PN , SP , t中 , 一种 , 中执 , 作时 , 储数 , 况 , 动截 , 取的 , 存储 , 情况 , 截取 , 执行 , 据操 , 据被 , 操作 , 数据 , 时数 , 的一 , 种情 , 自动 , 行存 , 被自 Posted in ASP.NET | No Comments »
星期二, 06月 3rd, 2008
我经常要在程序de人机交互中用到模态窗口,但在B/S开发中,这一切变得不容易了,虽然也可以用window.showModalDialog函数实现(见http://dotnet.aspx.cc/ShowDetail.aspx?id=49ML4AO8-5PB3-4KNY-NJZD-LJOIOXV4M1X4 ),但多数用起来麻烦,还要为了回传值用Frameset建立2个无用de窗口.不爽!
我发现可以尝试在初始页面中嵌入一个IFRAME,然后用IFRAME来显示一个页面,并将IFRAME设定为按绝对位置摆放,Z-Index设置为最高de9999,这样就可以将这个页面覆盖在初始界面上,当需要显示模态窗口时,就显示这个IFRAME,可以将IFRAMEde尺寸扩大到能覆盖住初始窗口,也可以盖住关键项,目de就是不让后面de窗口有什么变化de可能.在IFRAME显示de窗口需要关闭时只要对它deparentdeIFRAME隐藏就可以了.实际试验时发现IFRAMEdediaplay不能在子窗口被改变,所以,我还需要将IFRAME放到一个DIV中,控制DIVde显示就可以控制窗口de出现或隐藏.但为什么不直接用DIV来显示窗口呢,原因有两个:1.DIV不能遮挡它后面deDropdownlist控件,而IFRAME能.2.不容易将窗口内de内容放置到一个单独de网页中,复用性差.
以下是相关代码,显示隐藏使用了客户端和服务端相关代码两种写法:
WebForm1.aspx
<%@ Page language=”c#” Codebehind=”WebForm1.aspx.cs” AutoEventWireup=”false” Inherits=”WSGUI1.WebForm1″ %> <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN” > <HTML> <HEAD> <title>WebForm1</title> <meta name=”GENERATOR” Content=”Microsoft Visual Studio .NET 7.1″> <meta name=”CODE_LANGUAGE” Content=”C#”> <meta name=”vs_defaultClientScript” content=”JavaScript”> <meta name=”vs_targetSchema” content=”http://schemas.microsoft.com/intellisense/ie5 “> <script language=”javascript”> function ShowLayer() { document.all.MyFormLayer.style.display=”; return false; } function SetURL(url) { document.all.IFRAME1.src=url; } </script> </HEAD> <body MS_POSITIONING=”GridLayout”> <form id=”Form1″ method=”post” runat=”server”> <FONT face=”宋体”> <asp:DropDownList id=”DropDownList1″ style=”Z-INDEX: 101; LEFT: 40px; POSITION: absolute; TOP: 208px” runat=”server” Width=”184px”> <asp:ListItem Value=”TEST1″>q</asp:ListItem> <asp:ListItem Value=”TEST2″>w</asp:ListItem> <asp:ListItem Value=”TEST3″>e</asp:ListItem> <asp:ListItem Value=”TEST4″>r</asp:ListItem> </asp:DropDownList></FONT> <input type=”button” name=”MyButton” value=”TEST” id=”MyButton” onclick=”ShowLayer();SetURL(’WebForm2.aspx’)” style=”Z-INDEX: 102; LEFT: 360px; POSITION: absolute; TOP: 336px”> <div id=”MyFormLayer” style=”DISPLAY: none;Z-INDEX: 103;LEFT: 16px;WIDTH: 408px;POSITION: absolute;TOP: 24px;HEIGHT: 304px”> <iframe scrolling=”no” frameborder=”0″ width=”100%” height=”100%” id=”IFRAME1″ runat=”server”> </iframe> </div> <asp:Button id=”Button2″ style=”Z-INDEX: 104; LEFT: 256px; POSITION: absolute; TOP: 336px” runat=”server” Text=”ASPXTest”></asp:Button> </form> </body> </HTML>
WebForm1.aspx.cs
….
public class WebForm1 : System.Web.UI.Page { protected System.Web.UI.WebControls.DropDownList DropDownList1; protected System.Web.UI.HtmlControls.HtmlGenericControl IFRAME1; protected System.Web.UI.WebControls.Button Button2; private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户相关代码以初始化页面 if(!IsPostBack) { } } public static void CreateScript(System.Web.UI.Page mypage,string strScript,string ID) { string strscript=”<script language=’javascript’>”; strscript = strScript; strscript = “</script>”; if(!mypage.IsStartupScriptRegistered(ID)) mypage.RegisterStartupScript(ID, strscript); } private void Button2_Click(object sender, System.EventArgs e) { IFRAME1.Attributes.Add(”src”,”WebForm2.aspx?NAME=’中国’”); CreateScript(Page,”ShowLayer();”,”SHOW”); } }
WebForm2.aspx
<%@ Page language=”c#” Codebehind=”WebForm2.aspx.cs” AutoEventWireup=”false” Inherits=”WSGUI1.WebForm2″ %> <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN” > <HTML> <HEAD> <title>WebForm2</title> <meta name=”GENERATOR” Content=”Microsoft Visual Studio .NET 7.1″> <meta name=”CODE_LANGUAGE” Content=”C#”> <meta name=”vs_defaultClientScript” content=”JavaScript”> <meta name=”vs_targetSchema” content=”http://schemas.microsoft.com/intellisense/ie5 “> <script language=”javascript”> function hide() { parent.MyFormLayer.style.display = “none”; } </script> </HEAD> <body MS_POSITIONING=”GridLayout”> <form id=”Form2″ method=”post” runat=”server”> <table border=”0″ width=”100%” cellspacing=”0″ cellpadding=”0″ bgcolor=”#6887bb” height=”100%” id=”table1″ style=”BORDER-TOP-STYLE: outset; BORDER-RIGHT-STYLE: outset; BORDER-LEFT-STYLE: outset; BORDER-BOTTOM-STYLE: outset”> <tr> <td> </td> <td> </td> <td> </td> </tr> <tr> <td> </td> <td> <p align=”center”><font color=”#ffffff”>模仿模态窗口效果</font></p> <p align=”center”><input type=”button” onclick=”hide()” style=”WIDTH: 80px” value=”点击关闭”> <asp:Button id=”Button1″ runat=”server” Text=”ASPXTest”></asp:Button></p> </td> <td> </td> </tr> <tr> <td> </td> <td> </td> <td> </td> </tr> </table> </form> </body> </HTML>
WebFom2.aspx.cs
namespace WSGUI1 { /// <summary> /// WebForm2 de摘要说明. /// </summary> public class WebForm2 : System.Web.UI.Page { protected System.Web.UI.WebControls.Button Button1; private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户相关代码以初始化页面 if(!IsPostBack) { Button1.Attributes.Add(”onclick”,”hide()”); } }
}
Tags: al , am , AS , da , ET , E建 , Fr , IF , l窗 , ME , mO , ne , od , PN , ra , SP , t中 , 中使 , 使用 , 口 , 建立 , 用I , 窗口 , 立类 , 类M Posted in ASP.NET | No Comments »
星期二, 06月 3rd, 2008
日历控件是.net自带de控件之一,功能强大,在很多项目开发中都有用到,对于blog系统来说更是必不可少.纵是好玉也仍需雕琢,为了使它更美观实用,我还需要对它进行二次开发. 新建一个用户控件,把calender控件拉进来.第一步是外观设置,这个根据您de需要,只需对它de相关属性做一些调整即可.下图是我调整后de界面
属性设置如下:
<asp:calendar id=”Calendar1″ CellPadding=”2″ Width=”160px” TitleStyle-BackColor=”#000000″ BorderColor=”#aaaaaa” DayHeaderStyle-BackColor=”#5e715e” OtherMonthDayStyle-ForeColor=”#cccccc” DayNameFormat=”Full” runat=”server” TitleStyle-ForeColor=”#ffffff” NextPrevStyle-ForeColor=”#ffffff” CellSpacing=”1″ WeekendDayStyle-BackColor=”#eeeeee” DayHeaderStyle-ForeColor=”#ffffff” SelectionMode=”None” TodayDayStyle-BorderColor=”#5e715e” TodayDayStyle-BorderWidth=”1″ TodayDayStyle-Font-Bold=”true” TodayDayStyle-ForeColor=”#5e715e” >
第二步是对内部功能de调整,这个工作主要集中在以下两个事件de处理上.
PreRender:当服务器控件将要呈现给其包含dePage对象时发生.
DayRender:当为Calendar控件在控件层次结构中创建每一天时发生.
先定义三个整型变量和整型数组
private int[] arrCurrentDays,arrPreDays,arrNextDays; //三个变量分别是当前月,前一月,和下一个月 private int intCurrentMonth,intPreMonth,intNextMonth; //三个整型数组存放相对月份写有blogde日期 protected System.Web.UI.WebControls.Calendar Calendar1; //这个就是我de日历控件了
2. 下面我将分别给出这两个事件de源码,并在下面解释它实现de功能,如果您看不明白,可以先看下面de说明
PreRender
private void Calendar1_PreRender(object sender, System.EventArgs e) { Thread threadCurrent = Thread.CurrentThread; CultureInfo ciNew = (CultureInfo)threadCurrent.CurrentCulture.Clone(); ciNew.DateTimeFormat.DayNames = new string[]{”日”,”一”,”二”,”三”,”四”,”五”,”六”}; ciNew.DateTimeFormat.FirstDayOfWeek = DayOfWeek.Sunday; threadCurrent.CurrentCulture = ciNew; }
以上相关代码改变了星期名称de显示.您只需改变字符数组de值就能改名称显示.
DayRender
private void Calendar1_DayRender(object sender, System.Web.UI.WebControls.DayRenderEventArgs e) { //该控件在创建每一天时发生. CalendarDay d = ((DayRenderEventArgs)e).Day; TableCell c = ((DayRenderEventArgs)e).Cell; }
Tags: AS , bl , ET , g打 , lo , ne , og , PN , SP , T技 , 个性 , 为B , 历 , 巧为 , 性日 , 打造 , 技巧 , 日历 , 造个 Posted in ASP.NET | No Comments »
星期二, 06月 3rd, 2008
相关代码如下:
<%@ Import Namespace=”System” %> <%@ Import Namespace=”System.IO” %> <%@ Import Namespace=”System.Drawing” %>
<%@ Page language=”vb” %>
<script runat=”server”> Dim FilePath As String = Server.MapPath(”FengEr.jpg”) Sub Page_Load(Sender As Object, E As EventArgs) Dim image As System.Drawing.Image = System.Drawing.Image.FromFile( FilePath ) Dim g As Graphics = Graphics.FromImage(image) g.DrawImage(image, 0, 0, image.Width, image.Height) Dim f As Font = new Font(”华文行楷”, 30) Dim b As Brush = new SolidBrush(Color.Green) Dim s As String = Request.QueryString(”Str”) g.DrawString(s, f, b, 20, 290) image.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg) g.Dispose() image.Dispose() End Sub </script>
只要把这个相关代码存成一个aspx文件,比如Test.aspx.然后放到wwwroot里面(假设您de虚拟目录是默认de).再做一个Test.jpgde图片,就可以在(20, 290)这个位置打印出“华文行楷”这种字体de文字了.调用方法很简单:
http://localhost/Test.aspx?Str=Dicky’s Blog!
对于打印de位置和字体还有图片文件都是可以自己设定de.另外,如果出现了以英文作为参数就可以正常显示,而对于中文就无法显示de情况,是因为Asp.netdeweb.config设置不正确造成了,需要进行如下设置:
<?xml version=”1.0″ encoding=”utf-8″?> <configuration> <system.web> <globalization requestEncoding=”gb2312″ responseEncoding=”gb2312″ culture=”zh-CN” fileEncoding=”gb2312″/> </system.web> </configuration>
这样,就可以正常显示了.
Tags: AS , ET , ne , PN , SP , t实 , 单的 , 印 , 字水 , 实现 , 文字 , 水印 , 现简 , 用A , 的文 , 简单 Posted in ASP.NET | No Comments »
星期二, 06月 3rd, 2008
在中文网站开发中,为了满足台湾/香港等有中文繁体阅读习惯de用户,很多网站需要实现中文简/繁体转换.
当然在实际de开发中,还要注意网站de图片上如果有中文de,也需要根据当前显示de是简体,还是繁体进行切换,否则无法达到效果!在本文中,我只帖上汉字转换de相关代码.如果有不清楚怎么调用de,请在我deBlog下留下Email.我直接把调用相关代码例子发给您!
注意:如在实际应用中,发现有本例子字库以外de汉字,可以自己添加,繁体简体对应字在_sGB和_tGB中de对应位置要一致!否则转换会出问题!
相关代码例子:
/// <summary> /// G2B5Filter de摘要说明. /// 将GB2312字符和Big5字符进行对照转换 /// 作者: 程式猎人 2003-06-24 /// </summary> public class G2B5Filter : Stream { private Stream _sink; private long _position; private const string _sGB=@”皑蔼碍爱袄奥坝罢摆败颁办绊帮绑镑谤剥饱宝报鲍辈贝钡狈备惫绷笔毕毙币闭边编贬变辩辫标鳖别瘪濒滨宾摈饼并拨钵铂驳卜补财参蚕残惭惨灿苍舱仓沧厕侧册测层诧搀掺蝉馋谗缠铲产阐颤场尝长偿肠厂畅钞车彻尘陈衬撑称惩诚骋痴迟驰耻齿炽冲虫宠畴踌筹绸丑橱厨锄雏础储触处传疮闯创锤纯绰辞词赐聪葱囱从丛凑蹿窜错达带贷担单郸掸胆惮诞弹当挡党荡档捣岛祷导盗灯邓敌涤递缔颠点垫电淀钓调谍叠钉顶锭订丢东动栋冻斗犊独读赌镀锻断缎兑队对吨顿钝夺堕鹅额讹恶饿儿尔饵贰发罚阀珐矾钒烦范贩饭访纺飞诽废费纷坟奋愤粪丰枫锋风疯冯缝讽凤肤辐抚辅赋复负讣妇缚该钙盖干赶秆赣冈刚钢纲岗镐搁鸽阁铬个给龚宫巩贡钩沟构购够蛊顾剐挂关观馆惯贯广规硅归龟闺轨诡柜贵刽辊滚锅国过骇韩汉号阂鹤贺横轰鸿红后壶护沪户哗华画划话怀坏欢环还缓换唤痪焕涣黄谎挥辉毁贿秽会烩汇讳诲绘荤浑伙获货祸击机积饥迹讥鸡绩缉极辑级挤几蓟剂济计记际继纪夹荚颊贾钾价驾歼监坚笺间艰缄茧检碱硷拣捡简俭减荐槛鉴践贱见键舰剑饯渐溅涧将浆蒋桨奖讲酱胶浇骄娇搅铰矫侥脚饺缴绞轿较阶节杰洁结诫届紧锦仅谨进晋烬尽劲荆茎鲸惊经颈静镜径痉竞净纠厩旧驹举据锯惧剧鹃绢觉决诀绝钧军骏开凯颗壳课垦恳抠库裤夸块侩宽矿旷况亏岿窥馈溃扩阔蜡腊莱来赖蓝栏拦篮阑兰澜谰揽览懒缆烂滥捞劳涝乐镭垒类泪篱离里鲤礼丽厉励砾历沥隶俩联莲连镰怜涟帘敛脸链恋炼练粮凉两辆谅疗辽镣猎临邻鳞凛赁龄铃凌灵岭领馏刘龙聋咙笼垄拢陇楼娄搂篓芦卢颅庐炉” “掳卤虏鲁赂禄录陆驴吕铝侣屡缕虑滤绿峦挛孪滦乱抡轮伦仑沦纶论萝罗逻锣箩骡骆络妈玛码蚂马骂吗买麦卖迈脉瞒馒蛮满谩猫锚铆贸么霉没镁门闷们锰梦谜弥觅幂绵缅庙灭悯闽鸣铭谬谋亩钠纳难挠脑恼闹馁内拟腻撵捻酿鸟聂啮镊镍柠狞宁拧泞钮纽脓浓农疟诺欧鸥殴呕沤盘庞抛赔喷鹏骗飘频贫苹凭评泼颇扑铺朴谱栖凄脐齐骑岂启气弃讫牵扦铅迁签谦钱钳潜浅谴堑枪呛墙蔷强抢锹桥乔侨翘窍窃钦亲寝轻氢倾顷请庆琼穷趋区躯驱龋颧权劝却鹊确让饶扰绕热韧认纫荣绒软锐闰润洒萨鳃赛叁伞丧骚扫涩杀纱筛晒删闪陕赡缮伤赏烧绍赊摄慑设绅审婶肾渗声绳胜圣师狮湿诗尸时蚀实识驶势适释饰视试寿兽枢输书赎属术树竖数帅双谁税顺说硕烁丝饲耸怂颂讼诵擞苏诉肃虽随绥岁孙损笋缩琐锁獭挞态摊贪瘫滩坛谭谈叹汤烫涛绦讨腾誊锑题体屉条贴铁厅听烃铜统头秃图涂团颓蜕脱鸵驮驼椭洼袜弯湾顽万网韦违围为潍维苇伟伪纬谓卫温闻纹稳问瓮挝蜗涡窝卧呜钨乌污诬无芜吴坞雾务误锡牺袭习铣戏细虾辖峡侠狭厦吓鲜纤咸贤衔闲显险现献县馅羡宪线厢镶乡详响项萧嚣销晓啸蝎协挟携胁谐写泻谢锌衅兴汹锈绣虚嘘须许叙绪续轩悬选癣绚学勋询寻驯训讯逊压鸦鸭哑亚讶阉烟盐严颜阎艳厌砚彦谚验鸯杨扬疡阳痒养样瑶摇尧遥窑谣药爷页业叶医铱颐遗仪蚁艺亿忆义诣议谊译异绎荫阴银饮隐樱婴鹰应缨莹萤营荧蝇赢颖哟拥佣痈踊咏涌优忧邮铀犹诱舆鱼渔娱与屿语吁御狱誉预驭鸳渊辕园员圆缘远愿约跃钥岳粤悦阅云郧匀陨运蕴酝晕韵杂灾载攒暂赞赃脏凿枣责择则泽贼赠扎” “札轧铡闸栅诈斋债毡盏斩辗崭栈战绽张涨帐账胀赵蛰辙锗这贞针侦诊镇阵挣睁狰争帧郑证织职执纸挚掷帜质滞钟终种肿众诌轴皱昼骤猪诸诛烛瞩嘱贮铸筑驻专砖转赚桩庄装妆壮状锥赘坠缀谆着浊兹资渍踪综总纵邹诅组钻亘芈啬厍厣靥赝匦匮赜刭刿剀伛伥伧伫侪侬俦俨俪俣偾偬偻傥傧傩佥籴黉冁凫兖衮亵脔禀冢讦讧讪讴讵讷诂诃诋诏诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卺陉陧邝邬邺郏郐郓郦刍奂劢巯垩圹坜垆垭垲埘埚埙芗苈苋苌苁苎茏茑茔茕荛荜荞荟荠荦荥荩荪荭莳莴莅莸莺萦蒇蒉蒌蓦蓠蓣蔹蔺蕲薮藓奁尴扪抟挢掴掼揿摅撄撷撸撺叽呒呓呖呗咛哒哓哔哕哙哜哝唛唠唢啧啭喽喾嗫嗳辔嘤噜囵帏帱帻帼岖岘岚峄峤峥崂崃嵘嵛嵝巅徕犷狯狲猃猡猕饧饨饩饪饫饬饴饷饽馀馄馊馍馐馑馔庑赓廪忏怃怄忾怅怆怿恸恹恻恺恽悭惬愠愦懔闩闫闱闳闵闶闼闾阃阄阆阈阊阌阍阏阒阕阖阗阙阚沣沩泷泸泺泾浃浈浍浏浒浔涞涠渎渑渖渌溆滟滠滢滗潆潇潋潴濑灏骞迩迳逦屦弪妩妪妫姗娅娆娈娲娴婵媪嫒嫔嫱嬷驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纡纣纥纨纩纭纰纾绀绁绂绉绋绌绗绛绠绡绨绫绮绯绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡缢缣缤缥缦缧缪缫缬缭缯缱缲缳缵玑玮珏珑顼玺珲琏瑷璎璇瓒韪韫韬杩枥枨枞枭栉栊栌栀栎柽桠桡桢桤桦桧栾棂椟椠椤椁榄榇榈榉槟槠樯橥橹橼檐檩殁殇殒殓殚殡轫轭轲轳轵轶轸轹轺轼轾辁辂辄辇辋辍辎辏辘辚戋戗戬瓯昙晔晖暧贲贳贶贻贽” “赀赅赆赈赉赇赕赙觇觊觋觌觎觏觐觑毵氇氩氲牍胧胪胫脍脶腌腽膑欤飑飒飓飕飙毂齑斓炀炜炖烨焖焘祢祯禅怼悫愍懑戆沓泶矶砀砗砺砻硖硗碛碜龛睐睑畲罴羁钆钇钋钊钌钍钏钐钔钗钕钛钣钤钫钪钭钬钯钰钲钴钶钸钹钺钼钽钿铄铈铉铊铋铌铍铎铐铑铒铕铖铗铙铛铟铠铢铤铥铧铨铪铩铫铮铯铳铴铵铷铹铼铽铿锂锆锇锉锊锒锓锔锕锖锛锞锟锢锩锬锱锲锴锶锷锸锼锾镂锵镆镉镌镏镒镓镔镖镗镘镙镛镞镟镝镡镤镦镧镨镪镫镬镯镱镳锺穑鸠鸢鸨鸩鸪鸫鸬鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹌鹎鹑鹕鹗鹞鹣鹦鹧鹨鹩鹪鹫鹬鹭鹳疖疠痨痫瘅瘗瘿瘾癞癫窦窭裆裢裣裥褛褴襁皲耧聍聩顸颀颃颉颌颏颔颚颛颞颟颡颢颦虬虮虿蚬蚝蛎蛏蛱蛲蛳蛴蝈蝾蝼罂笃笕笾筚筝箦箧箨箪箫篑簖籁舣舻袅羟糁絷麸趱酽酾鹾趸跄跖跞跷跸跹跻踬踯蹑蹒蹰躏躜觞觯靓雳霁霭龀龃龅龆龇龈龉龊龌黾鼋鼍隽雠銮錾鱿鲂鲅鲈稣鲋鲎鲐鲒鲔鲕鲚鲛鲞鲟鲠鲡鲢鲣鲥鲦鲧鲨鲩鲫鲭鲮鲰鲱鲲鲳鲵鲶鲷鲻鲽鳄鳅鳆鳇鳌鳍鳎鳏鳐鳓鳔鳕鳗鳜鳝鳟鳢鞑鞯鹘髅髋髌魇魉飨餍鬓黩黪鼹”; private const string _tGB=@”皚藹礙愛襖奧壩罷擺敗頒辦絆幫綁鎊謗剝飽寶報鮑輩貝鋇狽備憊繃筆畢斃幣閉邊編貶變辯辮標鱉別癟瀕濱賓擯餅並撥缽鉑駁蔔補財參蠶殘慚慘燦蒼艙倉滄廁側冊測層詫攙摻蟬饞讒纏鏟產闡顫場嘗長償腸廠暢鈔車徹塵陳襯撐稱懲誠騁癡遲馳恥齒熾沖蟲寵疇躊籌綢醜櫥廚鋤雛礎儲觸處傳瘡闖創錘純綽辭詞賜聰蔥囪從叢湊躥竄錯達帶貸擔單鄲撣膽憚誕彈當擋黨蕩檔搗島禱導盜燈鄧敵滌遞締顛點墊電澱釣調諜疊釘頂錠訂丟東動棟凍鬥犢獨讀賭鍍鍛斷緞兌隊對噸頓鈍奪墮鵝額訛惡餓兒爾餌貳發罰閥琺礬釩煩範販飯訪紡飛誹廢費紛墳奮憤糞豐楓鋒風瘋馮縫諷鳳膚輻撫輔賦複負訃婦縛該鈣蓋幹趕稈贛岡剛鋼綱崗鎬擱鴿閣鉻個給龔宮鞏貢鉤溝構購夠蠱顧剮掛關觀館慣貫廣規矽歸龜閨軌詭櫃貴劊輥滾鍋國過駭韓漢號閡鶴賀橫轟鴻紅後壺護滬戶嘩華畫劃話懷壞歡環還緩換喚瘓煥渙黃謊揮輝毀賄穢會燴彙諱誨繪葷渾夥獲貨禍擊機積饑跡譏雞績緝極輯級擠幾薊劑濟計記際繼紀夾莢頰賈鉀價駕殲監堅箋間艱緘繭檢堿鹼揀撿簡儉減薦檻鑒踐賤見鍵艦劍餞漸濺澗將漿蔣槳獎講醬膠澆驕嬌攪鉸矯僥腳餃繳絞轎較階節傑潔結誡屆緊錦僅謹進晉燼盡勁荊莖鯨驚經頸靜鏡徑痙競淨糾廄舊駒舉據鋸懼劇鵑絹覺決訣絕鈞軍駿開凱顆殼課墾懇摳庫褲誇塊儈寬礦曠況虧巋窺饋潰擴闊蠟臘萊來賴藍欄攔籃闌蘭瀾讕攬覽懶纜爛濫撈勞澇樂鐳壘類淚籬離裏鯉禮麗厲勵礫曆瀝隸倆聯蓮連鐮憐漣簾斂臉鏈戀煉練糧涼兩輛諒療遼鐐獵臨鄰鱗凜賃齡鈴淩靈嶺領餾劉龍聾嚨籠壟攏隴樓婁摟簍蘆盧顱廬爐” “擄鹵虜魯賂祿錄陸驢呂鋁侶屢縷慮濾綠巒攣孿灤亂掄輪倫侖淪綸論蘿羅邏鑼籮騾駱絡媽瑪碼螞馬罵嗎買麥賣邁脈瞞饅蠻滿謾貓錨鉚貿麼黴沒鎂門悶們錳夢謎彌覓冪綿緬廟滅憫閩鳴銘謬謀畝鈉納難撓腦惱鬧餒內擬膩攆撚釀鳥聶齧鑷鎳檸獰甯擰濘鈕紐膿濃農瘧諾歐鷗毆嘔漚盤龐拋賠噴鵬騙飄頻貧蘋憑評潑頗撲鋪樸譜棲淒臍齊騎豈啟氣棄訖牽扡鉛遷簽謙錢鉗潛淺譴塹槍嗆牆薔強搶鍬橋喬僑翹竅竊欽親寢輕氫傾頃請慶瓊窮趨區軀驅齲顴權勸卻鵲確讓饒擾繞熱韌認紉榮絨軟銳閏潤灑薩鰓賽三傘喪騷掃澀殺紗篩曬刪閃陝贍繕傷賞燒紹賒攝懾設紳審嬸腎滲聲繩勝聖師獅濕詩屍時蝕實識駛勢適釋飾視試壽獸樞輸書贖屬術樹豎數帥雙誰稅順說碩爍絲飼聳慫頌訟誦擻蘇訴肅雖隨綏歲孫損筍縮瑣鎖獺撻態攤貪癱灘壇譚談歎湯燙濤絛討騰謄銻題體屜條貼鐵廳聽烴銅統頭禿圖塗團頹蛻脫鴕馱駝橢窪襪彎灣頑萬網韋違圍為濰維葦偉偽緯謂衛溫聞紋穩問甕撾蝸渦窩臥嗚鎢烏汙誣無蕪吳塢霧務誤錫犧襲習銑戲細蝦轄峽俠狹廈嚇鮮纖鹹賢銜閑顯險現獻縣餡羨憲線廂鑲鄉詳響項蕭囂銷曉嘯蠍協挾攜脅諧寫瀉謝鋅釁興洶鏽繡虛噓須許敘緒續軒懸選癬絢學勳詢尋馴訓訊遜壓鴉鴨啞亞訝閹煙鹽嚴顏閻豔厭硯彥諺驗鴦楊揚瘍陽癢養樣瑤搖堯遙窯謠藥爺頁業葉醫銥頤遺儀蟻藝億憶義詣議誼譯異繹蔭陰銀飲隱櫻嬰鷹應纓瑩螢營熒蠅贏穎喲擁傭癰踴詠湧優憂郵鈾猶誘輿魚漁娛與嶼語籲禦獄譽預馭鴛淵轅園員圓緣遠願約躍鑰嶽粵悅閱雲鄖勻隕運蘊醞暈韻雜災載攢暫贊贓髒鑿棗責擇則澤賊贈紮” “劄軋鍘閘柵詐齋債氈盞斬輾嶄棧戰綻張漲帳賬脹趙蟄轍鍺這貞針偵診鎮陣掙睜猙爭幀鄭證織職執紙摯擲幟質滯鍾終種腫眾謅軸皺晝驟豬諸誅燭矚囑貯鑄築駐專磚轉賺樁莊裝妝壯狀錐贅墜綴諄著濁茲資漬蹤綜總縱鄒詛組鑽亙羋嗇厙厴靨贗匭匱賾剄劌剴傴倀傖佇儕儂儔儼儷俁僨傯僂儻儐儺僉糴黌囅鳧兗袞褻臠稟塚訐訌訕謳詎訥詁訶詆詔詒誆誄詿詰詼詵詬詮諍諢詡誚誥誑誒諏諑諉諛諗諂誶諶諫謔謁諤諭諼諳諦諮諞謨讜謖諡謐謫譾譖譙譎讞譫讖巹陘隉鄺鄔鄴郟鄶鄆酈芻奐勱巰堊壙壢壚埡塏塒堝塤薌藶莧萇蓯苧蘢蔦塋煢蕘蓽蕎薈薺犖滎藎蓀葒蒔萵蒞蕕鶯縈蕆蕢蔞驀蘺蕷蘞藺蘄藪蘚奩尷捫摶撟摑摜撳攄攖擷擼攛嘰嘸囈嚦唄嚀噠嘵嗶噦噲嚌噥嘜嘮嗩嘖囀嘍嚳囁噯轡嚶嚕圇幃幬幘幗嶇峴嵐嶧嶠崢嶗崍嶸崳嶁巔徠獷獪猻獫玀獼餳飩餼飪飫飭飴餉餑餘餛餿饃饈饉饌廡賡廩懺憮慪愾悵愴懌慟懨惻愷惲慳愜慍憒懍閂閆闈閎閔閌闥閭閫鬮閬閾閶閿閽閼闃闋闔闐闕闞灃溈瀧瀘濼涇浹湞澮瀏滸潯淶潿瀆澠瀋淥漵灩灄瀅潷瀠瀟瀲瀦瀨灝騫邇逕邐屨弳嫵嫗媯姍婭嬈孌媧嫻嬋媼嬡嬪嬙嬤駔駟駙騶驛駑駘驍驊駢驪騏騍騅驂騭騖驁騮騸驃驄驏驥驤紆紂紇紈纊紜紕紓紺絏紱縐紼絀絎絳綆綃綈綾綺緋緄綞綬綹綣綰緇緙緗緹緲繢緦緶緱縋緡縉縝縟縞縭縊縑繽縹縵縲繆繅纈繚繒繾繰繯纘璣瑋玨瓏頊璽琿璉璦瓔璿瓚韙韞韜榪櫪棖樅梟櫛櫳櫨梔櫟檉椏橈楨榿樺檜欒欞櫝槧欏槨欖櫬櫚櫸檳櫧檣櫫櫓櫞簷檁歿殤殞殮殫殯軔軛軻轤軹軼軫轢軺軾輊輇輅輒輦輞輟輜輳轆轔戔戧戩甌曇曄暉曖賁貰貺貽贄” “貲賅贐賑賚賕賧賻覘覬覡覿覦覯覲覷毿氌氬氳牘朧臚脛膾腡醃膃臏歟颮颯颶颼飆轂齏斕煬煒燉燁燜燾禰禎禪懟愨湣懣戇遝澩磯碭硨礪礱硤磽磧磣龕睞瞼佘羆羈釓釔釙釗釕釷釧釤鍆釵釹鈦鈑鈐鈁鈧鈄鈥鈀鈺鉦鈷鈳鈽鈸鉞鉬鉭鈿鑠鈰鉉鉈鉍鈮鈹鐸銬銠鉺銪鋮鋏鐃鐺銦鎧銖鋌銩鏵銓鉿鎩銚錚銫銃鐋銨銣鐒錸鋱鏗鋰鋯鋨銼鋝鋃鋟鋦錒錆錛錁錕錮錈錟錙鍥鍇鍶鍔鍤鎪鍰鏤鏘鏌鎘鐫鎦鎰鎵鑌鏢鏜鏝鏍鏞鏃鏇鏑鐔鏷鐓鑭鐠鏹鐙鑊鐲鐿鑣鍾穡鳩鳶鴇鴆鴣鶇鸕鴝鴟鷥鴯鷙鴰鵂鸞鵓鸝鵠鵒鷳鵜鵡鵪鵯鶉鶘鶚鷂鶼鸚鷓鷚鷯鷦鷲鷸鷺鸛癤癘癆癇癉瘞癭癮癩癲竇窶襠褳襝襇褸襤繈皸耬聹聵頇頎頏頡頜頦頷顎顓顳顢顙顥顰虯蟣蠆蜆蠔蠣蟶蛺蟯螄蠐蟈蠑螻罌篤筧籩篳箏簀篋籜簞簫簣籪籟艤艫嫋羥糝縶麩趲釅釃鹺躉蹌蹠躒蹺蹕躚躋躓躑躡蹣躕躪躦觴觶靚靂霽靄齔齟齙齠齜齦齬齪齷黽黿鼉雋讎鑾鏨魷魴鮁鱸穌鮒鱟鮐鮚鮪鮞鱭鮫鯗鱘鯁鱺鰱鰹鰣鰷鯀鯊鯇鯽鯖鯪鯫鯡鯤鯧鯢鯰鯛鯔鰈鱷鰍鰒鰉鼇鰭鰨鰥鰩鰳鰾鱈鰻鱖鱔鱒鱧韃韉鶻髏髖髕魘魎饗饜鬢黷黲鼴”;
public G2B5Filter(Stream sink) { //System.Web.HttpContext.Current.Response.ContentEncoding=Encoding.GetEncoding(950); _sink = sink;
}
// The following members of Stream must be overriden. public override bool CanRead { get { return true; } }
public override bool CanSeek { get { return true; } }
public override bool CanWrite { get { return true; } }
public override long Length { get { return 0; } }
public override long Position { get { return _position; } set { _position = value; } }
public override long Seek(long offset, System.IO.SeekOrigin direction) { return _sink.Seek(offset, direction); }
public override void SetLength(long length) { _sink.SetLength(length); }
public override void Close() { _sink.Close(); }
public override void Flush() { _sink.Flush(); }
public override int Read(byte[] buffer, int offset, int count) { return _sink.Read(buffer, offset, count); } /// <summary> /// 实际处理字符替换de作业,将简体字和繁体字进行替换. /// </summary> /// <param name=”buffer”> </param> /// <param name=”offset”></param> /// <param name=”count”></param> public override void Write(byte[] buffer, int offset, int count) { Encoding e=Encoding.GetEncoding(936); //936是GB2312编码,950是Big5编码
string str=e.GetString(buffer,offset,count); for(int i=0;i<str.Length;i ) { int j=_sGB.IndexOf(str[i]); if(j!=-1)str=str.Replace(_sGB[j],_tGB[j]); } e=Encoding.GetEncoding(System.Web.HttpContext.Current.Response.Charset); _sink.Write(e.GetBytes(str), 0, e.GetByteCount(str)); }
}
public class EncodingFilter { Page thisPage;
public EncodingFilter(Page mPage) { thisPage=mPage; }
/// <summary> /// 对输入de流对象进行编码,然后Write /// </summary> /// <param name=”EncodingStyle”></param> public void G2BEncoding(string EncodingStyle) { //======================== 公共函数 Start ============================= thisPage.Response.ContentEncoding=Encoding.GetEncoding(”GB2312″);
if(EncodingStyle==”BIG5″) { thisPage.Response.Filter = new G2B5Filter(thisPage.Response.Filter); thisPage.Response.Charset=”BIG5″; }
if(EncodingStyle==”GB2312″) { thisPage.Response.Charset=”GB2312″; } //======================== 公共函数 End ============================= } }
Tags: AS , ET , ne , PN , SP , t中 , 中实 , 中文 , 体自 , 动转 , 实现 , 换的 , 文简 , 现中 , 的类 , 简繁 , 类 , 繁体 , 自动 , 转换 Posted in ASP.NET | No Comments »
星期二, 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语句:
在我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效率提高了多少!
Tags: AS , ET , ne , PN , SP , t应 , 和技 , 巧 , 序的 , 应用 , 技巧 , 方法 , 法和 , 用程 , 的方 , 程序 , 试A , 调试 Posted in ASP.NET | No Comments »
星期二, 06月 3rd, 2008
本人学Asp.Net不久,用de是C#写相关代码,在学习C#中发现很多初学者对继承和多态性不是特别de了解,因此作了这个例子,希望对您有所帮助,例子很简单
页面文件TestProfileClass2.aspx <%@ Page Language=”C#” ContentType=”text/html” ResponseEncoding=”gb2312″ Src=”profile2.cs” %> <%@ Import Namespace=”shai” %> <html> <head> <style> div{font:Arial, Helvetica, sans-serif; background-color:#cccccc; border-color:black; border-width:1; border-style:solid; padding:10,10,10,10; } </style> <script language=”c#” runat=”server”> public void Page_Load(Object sender,EventArgs e) { Profile profile = new Profile(); message.InnerHtml = “<u>Profile Class</u><br>”; message.InnerHtml = “Firstname:” profile.getFirstname() “<br>”; message.InnerHtml = “Lastname:” profile.getLastname() “<br>”; message.InnerHtml = “Phone:” profile.getPhonenumber() “<br><br>”; profile.save(); ExtendedProfile extendedprofile = new ExtendedProfile(); message.InnerHtml = “<u>ExtendedProfile Class</u></br>”; message.InnerHtml = “Firstname:” profile.getFirstname() “<br>”; message.InnerHtml = “Lastname:” profile.getLastname() “<br>”; message.InnerHtml = “Phone:” extendedprofile.getPhonenumber() “<br>”; message.InnerHtml = “Address1:” extendedprofile.getAddress1() “<br>”; message.InnerHtml = “Address2:” extendedprofile.getAddress2() “<br>”; message.InnerHtml = “City:” extendedprofile.getCity() “<br>”; message.InnerHtml = “State:” extendedprofile.getState() “<br>”; message.InnerHtml = “Postal:” extendedprofile.getPostal() “<br>”; message.InnerHtml = “Description:” extendedprofile.getDescription() “<br>”; extendedprofile.save(); } </script> <meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″> <title></title> </head> <body style=”font:Arial, Helvetica, sans-serif “> <b><h3>简单de继承/多态例子</h3></b><br><br> object output:<br> <br> <div id=”message” runat=”server” /> </body> </html>
类定义文件profile2.cs using System; using System.IO; using System.Xml; namespace shai //名称空间shai { interface ISaveData //定义一个接口ISaveData,他作为Profilede基类被继承,由于其有多态性de特点,可以被 { //不同类调用其中de方法,并修改 void save(); } public class Profile:ISaveData //定义类Profile { protected string _firstname; //里面包含三个属性,分别为_firstname、_lastname、phonenumber protected string _lastname; protected string _phonenumber; public Profile() //为属性定义其中de初始值 { _firstname = “Saidy”; _lastname = “Chen”; _phonenumber = “(010)88716990″; } public string getPhonenumber() //Profile类中de方法getPhonenumber() { return _phonenumber; } public virtual void setPhonenumber(string phonenumber) { _phonenumber = phonenumber; } public string getFirstname() //Profile类中de方法getFirstname() { return _firstname; } public void setFirstname(string firstname) { _firstname = firstname; } public string getLastname() //Profile类中de方法getLastname() { return _lastname; } public void setLastname(string lastname) { _lastname = lastname; } public virtual void save() //调用ISaveData接口desave()方法 { //保存数据为Text格式 FileStream fs = new FileStream(”D:\\myweb2\\profile2.txt”,FileMode.Create,FileAccess .Write); StreamWriter sw = new StreamWriter(fs); sw.WriteLine(”Firstname:” _firstname.ToString()); sw.WriteLine(”Lastname:” _lastname.ToString()); sw.WriteLine(”Phone:” _phonenumber.ToString()); sw.Flush(); sw.Close(); fs.Close(); } } public class ExtendedProfile:Profile 建立Profile子类ExtendedProfile,他可以继承Profile中de方法 { protected string _address1; //子类ExtendedProfilede属性 protected string _address2; protected string _city; protected string _state; protected string _postal; protected string _description; public ExtendedProfile() //子类ExtendedProfile中属性de初始值 { _address1 = “清华大学”; _address2 = “清华大学物理实验室”; _city = “北京”; _state = “北京”; _postal = “100024″; _description = “教授”; } public override void setPhonenumber(string phonenumber) //继承类Profile中desetPhonenumber()方法 { //setPhonenumber()方法de重载 _phonenumber = phonenumber; } public string getAddress1() //子类ExtendedProfile中de方法getAddress1(),以下类推 { return _address1; } public string getAddress2() { return _address2; } public void setAddress(string address1,string address2) { _address1 = address1; _address2 = address2; } public string getCity() { return _city; } public void setCity(string city) { _city = city; } public string getState() { return _state; } public void setState(string state) { _state = state; } public string getPostal() { return _postal; } public void setPostal(string postal) { _postal = postal; } public string getDescription() { return _description; } public void setDescription(string description) { _description = description; } public override void save() //调用接口ISaveData()中de方法save(),save()方法de重载,由于多态性 { //子类ExtendedProfile可以自定义并修改save()方法 string _document = “d:\\myweb2\\saidy.xml”; XmlTextWriter writer = null; //保存为一个Xml文件 try { writer = new XmlTextWriter(_document,null); writer.Formatting = Formatting.Indented; writer.WriteStartDocument(false); writer.WriteDocType(”Profile”,null,null,null); //表示<!DOCTYPE Profile> writer.WriteStartElement(”Profile”); //生成根元素 writer.WriteElementString(”firstname”,_firstname); //生成子元素 <firstname>_firstname</firstname> writer.WriteElementString(”lastname”,_lastname); writer.WriteElementString(”phonenumber”,_phonenumber); writer.WriteElementString(”address1″,_address1); writer.WriteElementString(”address2″,_address2); writer.WriteElementString(”city”,_city); writer.WriteElementString(”state”,_state); writer.WriteElementString(”postal”,_postal); writer.WriteEndElement(); writer.Flush(); writer.Close(); } catch(Exception ee) { Console.WriteLine(”Exception:{0}”,ee.ToString()); } } } }
Tags: AS , ET , ne , PN , SP , t初 , 于继 , 例子 , 关于 , 初学 , 和多 , 多态 , 子 , 学者 , 态性 , 性的 , 承和 , 的例 , 的关 , 给A , 继承 , 者的 Posted in ASP.NET | No Comments »