<?xml version="1.0" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="css/rss.xslt"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>WEB|WAP|网站建设|网站设计|网站制作|网站开发 - ASP.NET</title><link>http://www.hzzhit.com/blog/</link><description>兆合信息：专业的网站建设和网站制作公司 - </description><generator>RainbowSoft Studio Z-Blog 1.8 Arwen Build 81206</generator><language>zh-CN</language><copyright>Copyright 2008-2009 杭州兆合信息技术有限公司. All Rights Reserved.</copyright><pubDate>Tue, 07 Sep 2010 05:02:04 +0800</pubDate><item><title>Visual Studio Team System 2008 Team Suite 下载和升级（注册）</title><author>a@b.com (shine)</author><link>http://www.hzzhit.com/blog/asp-net/VS2008-DOWNLOAD-UPDATE.html</link><pubDate>Sun, 21 Feb 2010 20:43:36 +0800</pubDate><guid>http://www.hzzhit.com/blog/asp-net/VS2008-DOWNLOAD-UPDATE.html</guid><description><![CDATA[<p>　<font color="#0086e3">VS2008注册方法</font>非常简单，在开始&gt;设置&gt;控制面版&gt;添加或删除程序&gt;卸载vs.net2008(名字不太记得了)＞出现卸载界面＞点击Next＞输入上面CD-key -&gt;出现成功画面即可完美将试用版升级成为正式版。<br /><br /><strong>VS2008正式版序列号CDKEY</strong>：PYHYP-WXB3B-B2CCM-V9DX9-VDY8T<br />&nbsp;</p><h3>相关文件下载：</h3><p>文件详情： Visual Studio Team System 2008 Team Suite<br />软件版本： 2008简体中文正式版（试用版）<br />文件格式： RAR 压缩文档<br />文件大小： 4.24 GB<br />发布日期： 2008.2.9<br />官方网站： <a href="http://msdn.microsoft.com/vstudio" target="_blank"><font color="#0086e3">http://msdn.microsoft.com/vstudio</font></a><br />&nbsp;</p><p>下载地址为90天试用版（官方正式简体中文），只要按上面的说明更换CDKey即可完美升级为正式版。7个分卷压缩包均需下载才能正常安装，包含MSDN。前面6个压缩包均为700M，最后一个压缩包为142M<br /><br />VS2008下载地址：&nbsp;&nbsp;<a href="http://dl.iplaysoft.com/files/79.html" target="_blank"><font color="#0086e3">分卷1</font></a> | <a href="http://dl.iplaysoft.com/files/80.html" target="_blank"><font color="#0086e3">分卷2</font></a> | <a href="http://dl.iplaysoft.com/files/81.html" target="_blank"><font color="#0086e3">分卷3</font></a> | <a href="http://www.iplaysoft.com/vs2008.html" target="_blank"><font color="#0086e3">来自异次元</font></a> | <a href="http://dl.iplaysoft.com/files/82.html" target="_blank"><font color="#0086e3">分卷4</font></a> | <a href="http://dl.iplaysoft.com/files/83.html" target="_blank"><font color="#0086e3">分卷5</font></a> | <a href="http://dl.iplaysoft.com/files/84.html" target="_blank"><font color="#0086e3">分卷6</font></a> | <a href="http://dl.iplaysoft.com/files/85.html" target="_blank"><font color="#0086e3">分卷7</font></a></p>]]></description><category>ASP.NET</category><comments>http://www.hzzhit.com/blog/asp-net/VS2008-DOWNLOAD-UPDATE.html#comment</comments><wfw:comment>http://www.hzzhit.com/blog/</wfw:comment><wfw:commentRss>http://www.hzzhit.com/blog/feed.asp?cmt=122</wfw:commentRss><trackback:ping>http://www.hzzhit.com/blog/cmd.asp?act=tb&amp;id=122&amp;key=17518590</trackback:ping></item><item><title>asp.net cookies  使用方法</title><author>a@b.com (shine)</author><link>http://www.hzzhit.com/blog/asp-net/cookies.html</link><pubDate>Tue, 12 May 2009 23:19:26 +0800</pubDate><guid>http://www.hzzhit.com/blog/asp-net/cookies.html</guid><description><![CDATA[<p>Response.Cookie(&quot;username&quot;).value=&quot;aa&quot; 写入 <br />username=Request.Cookies(&quot;username&quot;).value 读取</p><p>C# :</p><p>方法1: <br />Response.Cookies[&quot;username&quot;].Value=&quot;gjy&quot;; <br />Response.Cookies[&quot;username&quot;].Expires=DateTime.Now.AddDays(1);</p><p>方法2: <br />System.Web.HttpCookie newcookie=new HttpCookie(&quot;username&quot;); <br />newcookie.Value=&quot;gjy&quot;; <br />newcookie.Expires=DateTime.Now.AddDays(1); <br />Response.AppendCookie(newcookie);</p><p><br />创建带有子键的cookies: <br />System.Web.HttpCookie newcookie=new HttpCookie(&quot;user&quot;); <br />newcookie.Values[&quot;username&quot;]=&quot;gjy&quot;; <br />newcookie.Values[&quot;password&quot;]=&quot;111&quot;; <br />newcookie.Expires=DateTime.Now.AddDays(1); <br />Response.AppendCookie(newcookie);</p><p>&nbsp;</p><p>cookies的读取:</p><p>无子键读取: <br />if(Request.Cookies[&quot;username&quot;]!=null) <br />{ <br />Response.Write(Server.HtmlEncode(Request.Cookies[&quot;username&quot;].Value)); <br />}</p><p>有子键读取: <br />if(Request.Cookies[&quot;user&quot;]!=null) <br />{ <br />Response.Write(Server.HtmlEncode(Request.Cookies[&quot;user&quot;][&quot;username&quot;].Value));<br />&nbsp;</p><p>&nbsp;</p>]]></description><category>ASP.NET</category><comments>http://www.hzzhit.com/blog/asp-net/cookies.html#comment</comments><wfw:comment>http://www.hzzhit.com/blog/</wfw:comment><wfw:commentRss>http://www.hzzhit.com/blog/feed.asp?cmt=49</wfw:commentRss><trackback:ping>http://www.hzzhit.com/blog/cmd.asp?act=tb&amp;id=49&amp;key=34449505</trackback:ping></item><item><title>ASP.NET页面传值方式</title><author>a@b.com (shine)</author><link>http://www.hzzhit.com/blog/asp-net/27.html</link><pubDate>Sun, 29 Mar 2009 16:40:19 +0800</pubDate><guid>http://www.hzzhit.com/blog/asp-net/27.html</guid><description><![CDATA[<p><br />方式1：&nbsp;&nbsp;&nbsp;&nbsp; <br />在接收页 的html代码里加上一行： &lt;%@ Reference Page = &quot;WebForm1.aspx&quot; %&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; WebForm1 fp=(WebForm1)Context.Handler; <br />&nbsp;&nbsp;&nbsp; this.TextBox1.Text=fp.name;&nbsp;&nbsp; //name 是第一页的public变量 <br />&nbsp; <br />&nbsp; <br />Context&nbsp; 提供对整个当前上下文（包括请求对象）的访问。您可以使用此类共享页之间的信息。 <br />&nbsp; <br />方式2：GET方式 <br />&nbsp;&nbsp;&nbsp; 在发送页 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public int sum=0; <br />&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i =int.Parse(this.TextBox1.Text)*2; <br />&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Server.Transfer(&quot;WebForm2.aspx?sum=&quot;+i); <br />&nbsp; <br />&nbsp;&nbsp;&nbsp; 接收页 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.TextBox1.Text=Request[&quot;sum&quot;].ToString(); <br />&nbsp;&nbsp;&nbsp; or&nbsp; this.TextBox1.Text=Request.Params[&quot;sum&quot;].ToString(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.TextBox1.Text=Request.QueryString[&quot;sum&quot;]; <br />&nbsp; <br />&nbsp; <br />方法3：全局变量&nbsp;&nbsp; <br />&nbsp;&nbsp; 发送页： <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Application[&quot;sum&quot;]=this.TextBox1.Text; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Server.Transfer(&quot;WebForm2.aspx&quot;); <br />&nbsp; <br />&nbsp;&nbsp; 接收页： <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.TextBox1.Text=(string)Application[&quot;sum&quot;]; <br />&nbsp; <br />Application实质上是整个虚拟目录中所有文件的集合，如果想在整个应用范围内使用某个变量值，Application对象将是最佳的选择 <br />&nbsp; <br />&nbsp; <br />&nbsp; <br />方法4：&nbsp;&nbsp; <br />&nbsp;发送页： <br />&nbsp;&nbsp;&nbsp; 1.定义静态变量：&nbsp; public static string str=&quot;&quot;; <br />&nbsp;&nbsp;&nbsp; 2. str=this.TextBox1.Text; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Server.Transfer(&quot;webform2.aspx&quot;); <br />&nbsp;接收页： <br />&nbsp;&nbsp;&nbsp; 1.引入第一页的命名空间：using WebApplication1; <br />&nbsp;&nbsp;&nbsp; 2&nbsp; this.TextBox1.Text=WebForm1.str;&nbsp;&nbsp; <br />&nbsp; <br />另外三种最常见的传值 <br />ASP.NET WEB FORMS 给开发者提供了极好的事件驱动开发模式。然而这种简单的应用程序开发模式却给我们带来了一些小问题，举个例子，在传统的ASP应用程序中，你能够通过POST方法很容易的把一个值或多个值从一个页面传送到另一个页面(request()/request.form()/request.querystring())，用同样的方法在ASP.NET中实现有点麻烦。在这里，通过其他方式来解决这种情形。ASP.NET为我们提供了三种方式，一种是可以通过用QueryString来传送相应的值，再一种是通过session变量来传送相应的值，还有就是通过Server.Transfer方法来实现。 <br />　　一、使用Querystring <br />　　Querystring是一种非常简单的传值方式，其缺点就是会把要传送的值显示在浏览器的地址栏中，并且在此方法中不能够传递对象。如果你想传递一个安全性不是那么太重要或者是一个简单的数值时，用此方法最好不过了。下面通过一个小例子来完成传值工作，步骤如下： <br />1、创建一个web form <br />2、在新建的web form中放置一个button1，在放置两个TextBox1,TextBox2 <br />3、为button按钮创建click事件 <br />代码如下： <br />private void button_click(object sender,System.EventArgs e) <br />{ <br />&nbsp; string url; <br />&nbsp; url=&quot;webform2.aspx?name=&quot;+TextBox1.Text + &quot;&amp;Email=&quot;+TextBox2.Text; <br />&nbsp; Response.Redirect(url); <br />} <br />4、新建一个目标页面命名为webform2 <br />5、在webform2中放置两个Label1,Label2 <br />在webform2的Page_Load中添加如下代码： <br />private void Page_Load(object sender,System.EventArgs e) <br />{ <br />&nbsp;&nbsp; Label1.Text=Request.QueryString[&quot;name&quot;]; <br />&nbsp;&nbsp; Label2.Text=Request.QueryString[&quot;Email&quot;]; <br />} <br />运行,即可看到传递后的结果了。 <br />二、使用Session变量 <br />使用Session变量传值是一种最常见的方式了，此中方式不仅可以把值传递到下一个页面，还可以交叉传递到多个页面，直至把Session变量的值removed后，变量才会消失。举个例子看看： <br />1、创建一个web form <br />2、在新建的web form中放置一个button1，在放置两个TextBox1,TextBox2 <br />3、为button按钮创建click事件 <br />代码如下： <br />private void button_click(object sender,System.EventArgs e) <br />{ <br />&nbsp;&nbsp; Session[&quot;Name&quot;]=TextBox1.Text; <br />&nbsp;&nbsp; Session[&quot;Email&quot;]=TextBox2.Text; <br />&nbsp;&nbsp; Response.Redirect(&quot;webform2.aspx&quot;); <br />} <br />4、新建一个目标页面命名为webform2 <br />5、在webform2中放置两个Label1,Label2 <br />在webform2的Page_Load中添加如下代码： <br />private void Page_Load(object sender,System.EventArgs e) <br />{ <br />&nbsp;&nbsp; Label1.Text=Session[&quot;Name&quot;].ToString(); <br />&nbsp;&nbsp; Label2.Text=Session[&quot;Email&quot;].ToString(); <br />&nbsp;&nbsp; Session.Remove(&quot;Name&quot;); <br />&nbsp;&nbsp; Session.Remove(&quot;Email&quot;); <br />} <br />运行,即可看到传递后的结果了。 <br />三、使用Server.Transfer <br />虽然这种方法有点复杂，但也不失为一种在页面传值的方式。 <br />举个例子看看： <br />1、创建一个web form <br />2、在新建的web form中放置一个button1，在放置两个TextBox1,TextBox2 <br />3、为button按钮创建click事件 <br />代码如下： <br />private&nbsp; void (object sender,System.EventArgs e) <br />{ <br />&nbsp;&nbsp; Server.Transfer(&quot;webform2.aspx&quot;); <br />} <br />4、创建过程来返回TextBox1,TextBox2控件的值代码如下： <br />public string Name <br />{ <br />&nbsp;&nbsp; get {return TextBox1.Text;} <br />} <br />public string Email <br />{ <br />&nbsp; get{return TextBox2.Text;} <br />} <br />5、新建一个目标页面命名为webform2 <br />6、在webform2中放置两个Label1,Label2 <br />在webform2的Page_Load中添加如下代码： <br />private void Page_load(object sender,System.EventArgs e) <br />{ <br />&nbsp; //创建webform的实例 <br />&nbsp; webform1 wf1; <br />&nbsp;//获得实例化的句柄 <br />&nbsp; wf1=(webform1)Context.Handler; <br />&nbsp; Label1.Text=wf1.Name; <br />&nbsp; Label2.Text=wf1.Email; <br />} <br />常见的就是这三种方法。<br />--------------------------------------------------------------------------------<br />第三个马甲,2007-11-01 08:59:27</p><p>本是想用第三种&nbsp; 使用Server.Transfer&nbsp; 方法.但仔细看他给的代码,不就是在webform建立一个public属性吗?那为什么一定要用server.transfer呢?response.redirect不一样可以访问吗?<br />--------------------------------------------------------------------------------<br />ByVal,2007-11-01 09:06:48</p><p>response.redirect是两个请求</p><p>--------------------------------------------------------------------------------<br />第三个马甲,2007-11-01 09:47:05</p><p>下面引用由ByVal发表的内容：</p><p>response.redirect是两个请求</p><p>根据你的提示在网上找得..<br />&nbsp;<br />虽然超级链接能够从一个页面导航到另一个页面，但这种导航方式是完全由用户控制的。有些时候，我们可能要用代码来控制整个导航过程，包括何时转到另一个页面。在这些场合，ASP.NET有三种不同的方式可以达到相似的目的：调用Response对象的Redirect方法，调用Server对象的Transfer或Execute方法。这三种导航方式的行为基本相似，但也有区别。</p><p>　　2.1 Response.Redirect</p><p>　　Response.Redirect方法导致浏览器链接到一个指定的URL。当Response.Redirect()方法被调用时，它会创建一个应答，应答头中指出了状态代码302（表示目标已经改变）以及新的目标URL。浏览器从服务器收到该应答，利用应答头中的信息发出一个对新URL的请求。</p><p>　　这就是说，使用Response.Redirect方法时重定向操作发生在客户端，总共涉及到两次与服务器的通信（两个来回）：第一次是对原始页面的请求，得到一个302应答，第二次是请求302应答中声明的新页面，得到重定向之后的页面。</p><p>　　2.2 Server.Transfer</p><p>　　Server.Transfer方法把执行流程从当前的ASPX文件转到同一服务器上的另一个ASPX页面。调用Server.Transfer时，当前的ASPX页面终止执行，执行流程转入另一个ASPX页面，但新的ASPX页面仍使用前一ASPX页面创建的应答流。</p><p>　　如果用Server.Transfer方法实现页面之间的导航，浏览器中的URL不会改变，因为重定向完全在服务器端进行，浏览器根本不知道服务器已经执行了一次页面变换。</p><p>　　默认情况下，Server.Transfer方法不会把表单数据或查询字符串从一个页面传递到另一个页面，但只要把该方法的第二个参数设置成True，就可以保留第一个页面的表单数据和查询字符串。</p><p>　　同时，使用Server.Transfer时应注意一点：目标页面将使用原始页面创建的应答流，这导致ASP.NET的机器验证检查（Machine Authentication Check，MAC）认为新页面的ViewState已被篡改。因此，如果要保留原始页面的表单数据和查询字符串集合，必须把目标页面Page指令的EnableViewStateMac属性设置成False。</p><p>　　2.3 Server.Execute</p><p>　　Server.Execute方法允许当前的ASPX页面执行一个同一Web服务器上的指定ASPX页面，当指定的ASPX页面执行完毕，控制流程重新返回原页面发出Server.Execute调用的位置。</p><p>　　这种页面导航方式类似于针对ASPX页面的一次函数调用，被调用的页面能够访问发出调用页面的表单数据和查询字符串集合，所以要把被调用页面Page指令的EnableViewStateMac属性设置成False。</p><p>　　默认情况下，被调用页面的输出追加到当前应答流。但是，Server.Execute方法有一个重载的方法，允许通过一个TextWriter对象（或者它的子对象，例如StringWriter对象）获取被调用页面的输出，而不是直接追加到输出流，这样，在原始页面中可以方便地调整被调用页面输出结果的位置。</p><p>　　为说明其工作过程，下面我们创建一个Web表单，放入一个按钮控件（Button1）和一个文本控件（Literal1)，在设计界面中转入代码视图，加入一个System.IO名称空间的Imports语句，然后加入用户点击按钮时执行的代码：</p><p>Private Sub Button1_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click <br />　Dim sw As StringWriter = New StringWriter() <br />　Server.Execute(&quot;WebForm2.aspx&quot;, sw) <br />　Literal1.Text = sw.ToString() <br />End Sub&nbsp;</p><p>　　然后为同一个Web应用创建第二个页面WebForm2.aspx。转入该页面的HTML视图，修改其Page指令禁止ViewState检查：</p><p>＜%@ Page Language=&quot;vb&quot; AutoEventWireup=&quot;false&quot; Codebehind=&quot;WebForm2.aspx.vb&quot; <br />Inherits=&quot;Navigate.WebForm2&quot; EnableViewStateMac=&quot;false&quot;%＞&nbsp;</p><p>　　再转到设计视图，为第二个页面增加一些控件。接下来，把第一个页面设置成默认页面，启动应用。点击按钮，WebForm2的控件将显示在WebForm1中放置Literal按钮的地方，如图一，注意页面标题和URL仍旧显示原始页面WebForm1。</p><p><br />图一：用Server.Execute合并两个源文件的页面&nbsp; <br />　 <br />　　用Server.Transfer或Server.Execute方法实现导航时，还要注意一点：最后得到的页面可能不是合法的HTML页面，因为最终返回给客户端的页面可能包含多个＜HTML＞和＜BODY＞等标记。IE浏览器看来能够容忍并正确处理这类情形，但如果用户要用到其他的浏览器，最好仔细测试一下。</p><p>　　三、比较与选择</p><p>　　既然从一个页面导航到另一个页面的办法有这么多，应该如何选择最佳的导航方式呢？下面是一些需要考虑的因素：</p><p>　　&middot;如果要让用户来决定何时转换页面以及转到哪一个页面，超级链接最适合。</p><p>　　&middot;如果要用程序来控制转换的目标，但转换的时机由用户决定，使用Web服务器的HyperLink控件，动态设置其NavigateUrl属性。</p><p>　　&middot;如果要把用户连接到另一台服务器上的资源，使用Response.Redirect。</p><p>　　&middot;用Response.Redirect把用户连接到非ASPX的资源，例如HTML页面。</p><p>　　&middot;如果要将查询字符串作为URL的一部分保留，使用Response.Redirect。</p><p>　　&middot;如果要将执行流程转入同一Web服务器的另一个ASPX页面，应当使用Server.Transfer而不是Response.Redirect，因为Server.Transfer能够避免不必要的网络通信，从而获得更好的性能和浏览效果。</p><p>　　&middot;如果要捕获一个ASPX页面的输出结果，然后将结果插入另一个ASPX页面的特定位置，则使用Server.Execute。</p><p>　　&middot;如果要确保HTML输出合法，请使用Response.Redirect，不要使用Server.Transfer或Server.Execute方法。</p>]]></description><category>ASP.NET</category><comments>http://www.hzzhit.com/blog/asp-net/27.html#comment</comments><wfw:comment>http://www.hzzhit.com/blog/</wfw:comment><wfw:commentRss>http://www.hzzhit.com/blog/feed.asp?cmt=27</wfw:commentRss><trackback:ping>http://www.hzzhit.com/blog/cmd.asp?act=tb&amp;id=27&amp;key=743a2455</trackback:ping></item><item><title>使用WebDeployment Project改善VS2005发布网站问题</title><author>a@b.com (shine)</author><link>http://www.hzzhit.com/blog/asp-net/WebDeploymentProject.html</link><pubDate>Sat, 07 Mar 2009 23:21:32 +0800</pubDate><guid>http://www.hzzhit.com/blog/asp-net/WebDeploymentProject.html</guid><description><![CDATA[<div class="postText"><div class="postText">VS2005发布网站时不会像VS2003一样生成规则的DLL文件、而生成的DLL文件名含有随机数且不能一个项目生成一个DLL文件、让人有一些遗憾、为了做到像vs2003一样，微软发布了WebDeployment Project插件可解决此问题：</div><div class="postText"><br /><a href="http://www.hzzhit.com/blog/upload/200903072338164674.JPG" /></div><br />2、选择添加一个WebDeployment Project(输入程序集名称和发布地址)<br /><img height="167" alt="" width="439" border="0" src="http://www.hzzhit.com/blog/upload/200903072332272314.JPG" /></div><div class="postText"><br />3、此时解决方案中会多出一个项目<br /><img height="130" alt="" width="188" border="0" src="http://www.hzzhit.com/blog/upload/200903072335493668.JPG" /></div><div class="postText"><br />4、右键选择该项目设置相应属性<br /><img style="width: 755px; height: 467px" alt="" border="0" src="http://www.hzzhit.com/blog/upload/200903072333287073.JPG" /><br /><br />5、右键选择该项目选择&ldquo;生成&rdquo;、此时会发布网站到指定的目录、生成DLL文件同vs2003一样、更新时只需<br />上传DLL文件<br /><br /><img height="77" alt="" width="155" border="0" src="http://www.hzzhit.com/blog/upload/200903072333382126.JPG" /></div>]]></description><category>ASP.NET</category><comments>http://www.hzzhit.com/blog/asp-net/WebDeploymentProject.html#comment</comments><wfw:comment>http://www.hzzhit.com/blog/</wfw:comment><wfw:commentRss>http://www.hzzhit.com/blog/feed.asp?cmt=17</wfw:commentRss><trackback:ping>http://www.hzzhit.com/blog/cmd.asp?act=tb&amp;id=17&amp;key=8b39ff47</trackback:ping></item><item><title>ASP.NET 防注入代码</title><author>a@b.com (shine)</author><link>http://www.hzzhit.com/blog/asp-net/aspnet-fangzhuru.html</link><pubDate>Mon, 23 Feb 2009 18:44:48 +0800</pubDate><guid>http://www.hzzhit.com/blog/asp-net/aspnet-fangzhuru.html</guid><description><![CDATA[<p><table cellspacing="1" cellpadding="6" width="100%" bgcolor="#cccccc" border="0">    <tbody>        <tr>            <td bgcolor="#f0f5fb">如果您的程序是asp.net程序，你可以&nbsp;使用本asp.net防注入代码。</td>        </tr>        <tr>            <td bgcolor="#f0f5fb">复制该程序到您的网站程序中的Global.asax.cs里，重新编译程序。</td>        </tr>        <tr>            <td bgcolor="#f0f5fb">您也可以根据需要自行对该程序进行修改。</td>        </tr>    </tbody></table></p><p>/// &lt;summary&gt; <br />/// 在 Application_BeginRequest中加入函数StartProcessRequest()<br />/// &lt;/summary&gt; <br />protected void Application_BeginRequest(Object sender, EventArgs e)<br />{<br />StartProcessRequest();<br />}</p><p>#region SQL注入式攻击代码分析 <br />/// &lt;summary&gt; <br />/// 处理用户提交的请求 <br />/// &lt;/summary&gt; <br />private void StartProcessRequest() <br />{ <br />try <br />{ <br />string getkeys = &quot;&quot;; <br />string sqlErrorPage = &quot;/default.aspx&quot;;//如果有非法参数,转向的错误提示页面 <br />if (System.Web.HttpContext.Current.Request.QueryString != null) <br />{</p><p>for (int i = 0; i &lt; System.Web.HttpContext.Current.Request.QueryString.Count; i++) <br />{ <br />getkeys = System.Web.HttpContext.Current.Request.QueryString.Keys[i]; <br />if (!ProcessSqlStr(System.Web.HttpContext.Current.Request.QueryString[getkeys])) <br />{ <br />System.Web.HttpContext.Current.Response.Redirect(sqlErrorPage); <br />System.Web.HttpContext.Current.Response.End(); <br />} <br />} <br />} <br />if (System.Web.HttpContext.Current.Request.Form != null) <br />{ <br />for (int i = 0; i &lt; System.Web.HttpContext.Current.Request.Form.Count; i++) <br />{ <br />getkeys = System.Web.HttpContext.Current.Request.Form.Keys[i]; <br />if (getkeys == &quot;__VIEWSTATE&quot;) continue; <br />if (!ProcessSqlStr(System.Web.HttpContext.Current.Request.Form[getkeys])) <br />{ <br />System.Web.HttpContext.Current.Response.Redirect(sqlErrorPage); <br />System.Web.HttpContext.Current.Response.End(); <br />} <br />} <br />} <br />if (System.Web.HttpContext.Current.Request.Cookies != null) <br />{ <br />for (int i = 0; i &lt; System.Web.HttpContext.Current.Request.Cookies.Count; i++) <br />{ <br />getkeys = System.Web.HttpContext.Current.Request.Cookies.Keys[i]; <br />if (!ProcessSqlStr(System.Web.HttpContext.Current.Request.Cookies[getkeys].ToString())) <br />{ <br />System.Web.HttpContext.Current.Response.Redirect(sqlErrorPage); <br />System.Web.HttpContext.Current.Response.End(); <br />} <br />} <br />} <br />} <br />catch <br />{ <br />// 错误处理: 处理用户提交信息! <br />} <br />} <br />/// &lt;summary&gt; <br />/// 分析用户请求是否正常 <br />/// &lt;/summary&gt; <br />/// &lt;param name=&quot;Str&quot;&gt;传入用户提交数据 &lt;/param&gt; <br />/// &lt;returns&gt;返回是否含有SQL注入式攻击代码 &lt;/returns&gt; <br />private bool ProcessSqlStr(string Str) <br />{ <br />bool ReturnValue = true; <br />try <br />{ <br />if (Str.Trim() != &quot;&quot;) <br />{ <br />string SqlStr = &quot;and |exec |insert |select |delete |update |count |* |chr |mid |master |truncate |char |declare&quot;;</p><p>string[] anySqlStr = SqlStr.Split('|'); <br />foreach (string ss in anySqlStr) <br />{ <br />if (Str.ToLower().IndexOf(ss) &gt;= 0) <br />{ <br />ReturnValue = false; <br />break; <br />} <br />} <br />} <br />} <br />catch <br />{ <br />ReturnValue = false; <br />} <br />return ReturnValue; <br />} <br />#endregion <br />&nbsp;</p>]]></description><category>ASP.NET</category><comments>http://www.hzzhit.com/blog/asp-net/aspnet-fangzhuru.html#comment</comments><wfw:comment>http://www.hzzhit.com/blog/</wfw:comment><wfw:commentRss>http://www.hzzhit.com/blog/feed.asp?cmt=16</wfw:commentRss><trackback:ping>http://www.hzzhit.com/blog/cmd.asp?act=tb&amp;id=16&amp;key=29cdf532</trackback:ping></item><item><title>C# switch语句用法</title><author>a@b.com (shine)</author><link>http://www.hzzhit.com/blog/asp-net/switch.html</link><pubDate>Sun, 15 Feb 2009 21:24:54 +0800</pubDate><guid>http://www.hzzhit.com/blog/asp-net/switch.html</guid><description><![CDATA[<p>　　某些时候，在嵌套使用if语句时，所有if语句看起来都非常相似，因为它们都在对一个完全相同的表达式进行求值，惟一的区别是每个if语句都将表达式的结果与一个不同的值进行比较。例如：<br /><br />&nbsp;</p><div id="highlighter"><span id="codeHigh"><span style="color: #0000ff">if</span> (day == 0)<br />&nbsp;&nbsp;&nbsp;&nbsp;dayName = &quot;<span style="color: #8b0000">Sunday</span>&quot;;<br /><span style="color: #0000ff">else</span>&nbsp;<span style="color: #0000ff">if</span> (day == 1)<br />&nbsp;&nbsp;&nbsp;&nbsp;dayName = &quot;<span style="color: #8b0000">Monday</span>&quot;;<br /><span style="color: #0000ff">else</span>&nbsp;<span style="color: #0000ff">if</span> (day == 2)<br />&nbsp;&nbsp;&nbsp;&nbsp;dayName = &quot;<span style="color: #8b0000">Tuesday</span>&quot;;<br /><span style="color: #0000ff">else</span>&nbsp;<span style="color: #0000ff">if</span> (day == 3)<br />&nbsp;&nbsp;&nbsp;&nbsp;...<br /><span style="color: #0000ff">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;dayName = &quot;<span style="color: #8b0000">Unknown</span>&quot;;<br /><br /></span></div><p><br />　　在这些情况下，通常需要将嵌套的if语句改写为一个switch语句，使程序更有效、更容易懂。<br /><br /><strong>　　理解switch语句的语法</strong><br /><br />　　switch语句的语法如下(switch，case和default是关键字)：<br /><br />&nbsp;</p><div id="highlighter"><span id="codeHigh"><span style="color: #0000ff">switch</span> ( <em>controllingExpression</em> )<br />{<br />　<span style="color: #0000ff">case</span><em>constantExpression</em> :<br />　　statements<br />　　<span style="color: #0000ff">break</span>;<br />　<span style="color: #0000ff">case</span><em>constantExpression</em> :<br />　　statements<br />　　<span style="color: #0000ff">break</span>;<br />　...<br />　<span style="color: #0000ff">default</span> :<br />　　statements<br />　　<span style="color: #0000ff">break</span>;<br />}<br /></span></div><p><br />　　<em>controllingExpression</em>(控制表达式)只求值一次。然后，从其<em>constantExpression</em>值等于<em>controllingExpression</em>值的case开始，它下方的所有语句都会一直运行，直到遇到一个break为止。随后，switch语句将结束，程序从switch结束大括号之后的第一个语句继续执行，并忽略其他case。<br /><br />　　假如任何一个<em>constantExpression</em>值都不等于<em>controllingExpression</em>的值，就运行可选标签default之下的语句。<br /><br />　　注意 假如<em>controllingExpression</em>的值和任何一个case标签都不匹配，同时没有发现一个default标签，程序会跳过整个switch语句，从它的结束大括号之后的第一个语句继续执行。<br /><br />　　例如，前面的嵌套if语句可以改写为以下switch语句：<br /><br />&nbsp;</p><div id="highlighter"><span id="codeHigh"><span style="color: #0000ff">switch</span> (day)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">case</span> 0:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dayName = &quot;<span style="color: #8b0000">Sunday</span>&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">case</span> 1:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dayName = &quot;<span style="color: #8b0000">Monday</span>&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">case</span> 2:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dayName = &quot;<span style="color: #8b0000">Tuesday</span>&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">default</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dayName = &quot;<span style="color: #8b0000">Unknown</span>&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">break</span>;<br />}<br /><br /></span></div><p><br /><strong>　　遵守switch语句规则</strong><br /><br />　　switch语句非常有用，但在使用时必须谨慎。所写的任何switch语句都必须遵循以下规则：<br /><br />　　只能针对基本数据类型使用switch，这些类型包括int和string等待。对于其他类型，则必须使用if语句。<br /><br />　　case标签必须是常量表达式(<em>constantExpression</em>)，如42或者&quot;42&quot;。如果需要在运行时计算case标签的值，必须使用if语句。<br /><br />　　case标签必须是惟一性的表达式；也就是说，不允许两个case具有相同的值。<br /><br />　　可以连续写下一系列case标签(中间不能间插额外的语句)，从而指定自己希望在多种情况下都运行相同的语句。如果像这样写，那么最后一个case标签之后的代码将适用于所有case。然而，假如一个标签关联了一个或多个语句，又没有使用break来跳出，那么执行就不能贯穿到后续的标签，而且编译器会报告一个错误。例如：<br /><br />&nbsp;</p><div id="highlighter"><span id="codeHigh"><span style="color: #0000ff">switch</span> (trumps)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">case</span> Hearts:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">case</span> Diamonds: <span style="color: #008000">// 允许贯穿 &mdash; 标签之间无额外代码</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color = &quot;<span style="color: #8b0000">Red</span>&quot;; <span style="color: #008000">// 针对Hearts和Diamonds这两种情况都会执行的代码</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">case</span> Clubs:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color = &quot;<span style="color: #8b0000">Black</span>&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">case</span> Spades: <span style="color: #008000">// 出错 &mdash; 标签之间有额外代码，而且没有使用break来跳出</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color = &quot;<span style="color: #8b0000">Black</span>&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">break</span>;<br />}<br /><br /></span></div><div><br />　　注意 break语句是用来阻止贯穿的最常见的方式，但也可以用一个return语句或者一个throw语句来替代它。throw语句的详情将在以后讨论。<br /><br />　　不准贯穿<br /><br />　　由于C#存在不准贯穿(fall through)的规则，所以可以自由地安排一个switch语句的各个区域，而不至于影响其含义(其中包括default标签，它传统意义上是最后一个标签，但并非一定如此)。<br /><br />　　C和C++程序员要注意的是，在使用C#编程时，必须为switch语句中的每个case(包括default case)都提供一个break语句。这个要求是一件好事情，C和C++程序员经常忘记添加break语句，造成执行自动贯穿到后续的标签，并造成很难发现的bug。<br /><br />　　然而，如果你真的喜欢，也可以在C#中模拟C++的贯穿行为，方法是使用一个goto语句来转到下一个case或者default标签。但这种用法是不推荐的！</div>]]></description><category>ASP.NET</category><comments>http://www.hzzhit.com/blog/asp-net/switch.html#comment</comments><wfw:comment>http://www.hzzhit.com/blog/</wfw:comment><wfw:commentRss>http://www.hzzhit.com/blog/feed.asp?cmt=9</wfw:commentRss><trackback:ping>http://www.hzzhit.com/blog/cmd.asp?act=tb&amp;id=9&amp;key=b7fe961c</trackback:ping></item><item><title>C#布尔操作符运的区别</title><author>a@b.com (shine)</author><link>http://www.hzzhit.com/blog/asp-net/8.html</link><pubDate>Sun, 15 Feb 2009 21:07:26 +0800</pubDate><guid>http://www.hzzhit.com/blog/asp-net/8.html</guid><description><![CDATA[<p>　　布尔操作符(Boolean operator)是求值结果要么为true，要么为false的一种操作符。C#提供了几个非常有用的布尔操作符，其中最简单的是NOT(求反)操作符，它使用感叹号(!)来表示。!操作符求一个布尔值的反值。在上例中，假如变量areYouReady的值为true，那么表达式!areYouReady的求值结果就是false。<br /><br /><strong>　　理解相等和关系操作符</strong><br /><br />　　两个更常用的布尔操作符是相等(==)和不等(!=)操作符。利用这两个二元操作符，可以判断一个值是否与相同类型的另一个值相等。表1展示了这些操作符是如何工作的，其中以一个名为age的int变量为例。<br /><br />　　表1 布尔操作符<br /><br />&nbsp;</p><table style="border-collapse: collapse" cellspacing="0" cellpadding="0" border="0">    <tbody>        <tr>            <td valign="top" width="136">操 作 符</td>            <td valign="top" width="136">含 义</td>            <td valign="top" width="139">示 例</td>            <td valign="top" width="138">结果(假定age = 42)</td>        </tr>        <tr>            <td valign="top" width="136">==</td>            <td valign="top" width="136">等于</td>            <td valign="top" width="139">age == 100</td>            <td valign="top" width="138">false</td>        </tr>        <tr>            <td valign="top" width="136">!=</td>            <td valign="top" width="136">不等于</td>            <td valign="top" width="139">age != 0</td>            <td valign="top" width="138">true</td>        </tr>    </tbody></table><p><br />　　与上述两个操作符密切相关的是关系操作符(relational operator)。利用这些操作符，可以判断一个值是否小于或大于同类型的另一个值。表2展示了如何使用这些操作符。<br /><br />　　表2 关系操作符<br /><br />&nbsp;</p><table style="border-collapse: collapse" cellspacing="0" cellpadding="0" border="0">    <tbody>        <tr>            <td valign="top" width="136">操 作 符</td>            <td valign="top" width="136">含 义</td>            <td valign="top" width="137">示 例</td>            <td valign="top" width="138">结果(假定age = 42)</td>        </tr>        <tr>            <td valign="top" width="136">&amp;＜</td>            <td valign="top" width="136">小于</td>            <td valign="top" width="137">age &amp;＜ 21</td>            <td valign="top" width="138">false</td>        </tr>        <tr>            <td valign="top" width="136">&amp;＜=</td>            <td valign="top" width="136">小于或等于</td>            <td valign="top" width="137">age &amp;＜= 18</td>            <td valign="top" width="138">false</td>        </tr>        <tr>            <td valign="top" width="136">&gt;</td>            <td valign="top" width="136">大于</td>            <td valign="top" width="137">age &gt; 16</td>            <td valign="top" width="138">true</td>        </tr>        <tr>            <td valign="top" width="136">&gt;=</td>            <td valign="top" width="136">大于或等于</td>            <td valign="top" width="137">age &gt;= 30</td>            <td valign="top" width="138">true</td>        </tr>    </tbody></table><p><br />　　注意 不要混淆相等操作符(==)与赋值操作符(=)。像<em>x==y</em>这样的代码会比较x与y，如果两个值相同，就会返回true。相反，像<em>x=y</em>这样的代码会将y的值赋给x。<br /><br /><strong>　　理解条件逻辑操作符</strong><br /><br />　　C#还提供了另外两个布尔操作符：逻辑AND(逻辑与)操作符，它使用<em>&amp;&amp;</em>来表示；以及逻辑OR(逻辑或)操作符，它使用||来表示。这两个操作符统称为条件逻辑操作符(conditional logical operator)。它们的作用是合并不同的布尔表达式，以构成一个更大的表达式。这两个二元操作符与相等及关系操作符的相似之处在于，它们的结果也是true或false。不同之处在于，它们操作的值(操作数)本身就必须是true或false。<br /><br />　　只有作为操作数的两个布尔表达式都为true的前提下，&amp;&amp;操作符的求值结果才为true。例如，只有在percent的值大于或等于零，而且percent的值小于或等于100的前提下，以下语句才会将true值赋给validPercentage：<br /><br />&nbsp;</p><div id="highlighter"><span id="codeHigh"><span style="color: #0000ff">bool</span> validPercentage;<br />validPercentage = (percent &gt;= 0) &amp;&amp; (percent &amp;＜= 100);<br /><br /></span></div><p><br />　　提示 新手常犯的一个错误是在合并两个测试的时候，只对percent变量命名一次，就像下面这样：<br /><br />&nbsp;</p><div id="highlighter"><span id="codeHigh">percent &gt;= 0 &amp;&amp; &amp;＜= 100 <span style="color: #008000">// 这个语句不能编译</span><br /><br /></span></div><p><br />　　使用圆括号有助于避免这种类型的错误，同时也有助于澄清表达式。例如，可以对比一下以下两个表达式：<br /><br />&nbsp;</p><div id="highlighter"><span id="codeHigh">validPercentage = percent &gt;= 0 &amp;&amp; percent &amp;＜= 100<br />validPercentage = (percent &gt;= 0) &amp;&amp; (percent &amp;＜= 100)<br /><br /></span></div><p><br />　　两个表达式返回的是同一个值，因为操作符&amp;&amp;的优先级低于&gt;=和&amp;＜=。然而，第二个表达式采取更清晰易懂的方式表明了它的目的。<br /><br />　　两个操作符任何一个为true，操作符||的求值结果都为true。使用操作符||，我们可以判断两个条件中是否有任何一个成立。如果percent的值小于零，或者percent的值大于100，以下语句会将值true赋给invalidPercentage：<br /><br />&nbsp;</p><div id="highlighter"><span id="codeHigh"><span style="color: #0000ff">bool</span> invalidPercentage;<br />invalidPercentage = (percent &amp;＜ 0) || (percent &gt; 100);<br /></span></div><p><br /><strong>短路求值</strong><br /><br />操作符&amp;&amp;和||都具备一项名为短路求值(short circuiting)的特性。有时，根本没有必要将两个操作数都求值出来。例如，假定操作符&amp;&amp;的左操作数求值为false，那么整个表达式的结果肯定是false，不管右操作数的值是什么。类似地，如果操作符||的左操作数求值为true，那么整个表达式的结果肯定是true。在这些情况下，操作符&amp;&amp;和||将绕过对右侧的布尔表达式的求值。下面是一些例子：<br /><br />&nbsp;</p><div id="highlighter"><span id="codeHigh">(percent &gt;= 0) &amp;&amp; (percent &amp;＜= 100)<br /><br /></span></div><div><br />在这个表达式中，假如percent的值小于零，那么操作符&amp;&amp;左侧的布尔表达式会求值为false。该值意味着整个表达式的结果肯定为false，无论右侧的表达式是什么。所以，不会对右侧的表达式进行求值。<br /><br /><div id="highlighter"><span id="codeHigh">(percent &amp;＜ 0) || (percent &gt; 100)</span></div><br />在这个表达式中，如果percent的值小于零，操作符||左侧的布尔表达式会求值为true。该值意味着整个表达式的结果肯定为true。所以，不会对右侧的表达式进行求值。<br /><br />如果能小心地设计表达式来使用条件逻辑操作符，就可以避免通过不必要的工作来提升代码的性能。将计算容易、简单的布尔表达式放到条件逻辑操作符的左边，将较复杂的表达式放到右边。在许多情况下，<a class="bluekey" target="_blank" href="http://dev.yesky.com/">程序</a>并不需要求值更复杂的表达式。<br /><br /><br />　　<strong>操作符优先级和结合性总结</strong><br /><br />　　表3总结了迄今为止学过的所有操作符的优先级和结合性。相同类别的操作符具有相同的优先级。一个更高类别中的操作符优先于较低类别中的操作符。<br /><br />　　表3 操作符小结<br /><br />&nbsp;</div><table style="border-collapse: collapse" cellspacing="0" cellpadding="0" border="0">    <tbody>        <tr>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1.5pt solid; padding-left: 5.4pt; border-left-color: #ebe9ed; background: silver; padding-bottom: 0cm; width: 162.2pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="216">            <p style="background: silver; line-height: 16.5pt; text-align: center" align="center">类 别<br />            &nbsp;</p>            </td>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1.5pt solid; padding-left: 5.4pt; border-left-color: #ebe9ed; background: silver; padding-bottom: 0cm; width: 64.5pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="86">            <p style="background: silver; line-height: 16.5pt; text-align: center" align="center">操 作 符<br />            &nbsp;</p>            </td>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1.5pt solid; padding-left: 5.4pt; border-left-color: #ebe9ed; background: silver; padding-bottom: 0cm; width: 113.35pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="151">            <p style="background: silver; line-height: 16.5pt; text-align: center" align="center">描 述<br />            &nbsp;</p>            </td>            <td style="padding-right: 5.4pt; border-top: windowtext 1.5pt solid; padding-left: 5.4pt; border-left-color: #ebe9ed; background: silver; padding-bottom: 0cm; width: 70.95pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; border-right-color: #ebe9ed" valign="top" width="95">            <p style="background: silver; line-height: 16.5pt; text-align: center" align="center">结 合 性<br />            &nbsp;</p>            </td>        </tr>        <tr>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 162.2pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="216"><br />            主要(Primary)<br />            &nbsp;</td>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 64.5pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="86"><br />            ()<br />            <br />            ++<br />            <br />            --<br />            &nbsp;</td>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 113.35pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="151"><br />            覆盖优先级<br />            <br />            后递增<br />            <br />            后递减<br />            &nbsp;</td>            <td style="padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 70.95pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent; border-right-color: #ebe9ed" valign="top" width="95"><br />            左<br />            &nbsp;</td>        </tr>        <tr>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 162.2pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="216"><br />            一元(Unary)<br />            &nbsp;</td>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 64.5pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="86"><br />            !<br />            <br />            +<br />            <br />            -<br />            <br />            ++<br />            <br />            --<br />            &nbsp;</td>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 113.35pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="151"><br />            逻辑NOT<br />            <br />            加<br />            <br />            减<br />            <br />            前递增<br />            <br />            前递减<br />            &nbsp;</td>            <td style="padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 70.95pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent; border-right-color: #ebe9ed" valign="top" width="95"><br />            左<br />            &nbsp;</td>        </tr>        <tr>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 162.2pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="216"><br />            乘(Multiplicative)<br />            &nbsp;</td>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 64.5pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="86"><br />            *<br />            <br />            /<br />            <br />            %<br />            &nbsp;</td>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 113.35pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="151"><br />            乘<br />            <br />            除<br />            <br />            求余<br />            &nbsp;</td>            <td style="padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 70.95pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent; border-right-color: #ebe9ed" valign="top" width="95"><br />            左<br />            &nbsp;</td>        </tr>        <tr>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 162.2pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="216"><br />            加(Additive)<br />            &nbsp;</td>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 64.5pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="86"><br />            +<br />            <br />            -<br />            &nbsp;</td>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 113.35pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="151"><br />            加<br />            <br />            减<br />            &nbsp;</td>            <td style="padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 70.95pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent; border-right-color: #ebe9ed" valign="top" width="95"><br />            左<br />            &nbsp;</td>        </tr>        <tr>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 162.2pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="216"><br />            关系(Relational)<br />            &nbsp;</td>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 64.5pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="86"><br />            &amp;＜ <br />            <br />            &amp;＜=<br />            <br />            &gt; <br />            <br />            &gt;=<br />            &nbsp;</td>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 113.35pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="151"><br />            小于<br />            <br />            小于或等于<br />            <br />            大于<br />            <br />            大于或等于<br />            &nbsp;</td>            <td style="padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 70.95pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent; border-right-color: #ebe9ed" valign="top" width="95"><br />            左<br />            &nbsp;</td>        </tr>        <tr>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 162.2pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="216"><br />            相等(Equality)<br />            &nbsp;</td>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 64.5pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="86"><br />            ==<br />            <br />            !=<br />            &nbsp;</td>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 113.35pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="151"><br />            等于<br />            <br />            不等于<br />            &nbsp;</td>            <td style="padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 70.95pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent; border-right-color: #ebe9ed" valign="top" width="95"><br />            左<br />            &nbsp;</td>        </tr>        <tr>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 162.2pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="216"><br />            条件AND(Conditional AND)<br />            &nbsp;</td>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 64.5pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="86"><br />            &amp;&amp;<br />            &nbsp;</td>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 113.35pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="151"><br />            逻辑AND<br />            &nbsp;</td>            <td style="padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 70.95pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent; border-right-color: #ebe9ed" valign="top" width="95"><br />            左<br />            &nbsp;</td>        </tr>        <tr>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 162.2pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="216"><br />            条件OR(Conditional OR)<br />            &nbsp;</td>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 64.5pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="86"><br />            ||<br />            &nbsp;</td>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 113.35pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="151"><br />            逻辑OR<br />            &nbsp;</td>            <td style="padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 70.95pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent; border-right-color: #ebe9ed" valign="top" width="95"><br />            左<br />            &nbsp;</td>        </tr>        <tr>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 162.2pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1.5pt solid; background-color: transparent" valign="top" width="216"><br />            赋值(Assignment)<br />            &nbsp;</td>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 64.5pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1.5pt solid; background-color: transparent" valign="top" width="86"><br />            =<br />            &nbsp;</td>            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 113.35pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1.5pt solid; background-color: transparent" valign="top" width="151"><br />            <br />            <br />            &nbsp;</td>            <td style="padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; width: 70.95pt; border-top-color: #ebe9ed; padding-top: 0cm; border-bottom: windowtext 1.5pt solid; background-color: transparent; border-right-color: #ebe9ed" valign="top" width="95"><br />            右<br />            &nbsp;</td>        </tr>    </tbody></table>]]></description><category>ASP.NET</category><comments>http://www.hzzhit.com/blog/asp-net/8.html#comment</comments><wfw:comment>http://www.hzzhit.com/blog/</wfw:comment><wfw:commentRss>http://www.hzzhit.com/blog/feed.asp?cmt=8</wfw:commentRss><trackback:ping>http://www.hzzhit.com/blog/cmd.asp?act=tb&amp;id=8&amp;key=e71c4211</trackback:ping></item><item><title>Session</title><author>a@b.com (shine)</author><link>http://www.hzzhit.com/blog/asp-net/3.html</link><pubDate>Thu, 12 Feb 2009 21:50:01 +0800</pubDate><guid>http://www.hzzhit.com/blog/asp-net/3.html</guid><description><![CDATA[<p>protected void Command1_Click(object sender, EventArgs e)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Session[&quot;name&quot;] = this.TextBox1.Text;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Redirect(&quot;default.aspx&quot;);</p><p>&nbsp;&nbsp;&nbsp; }</p>]]></description><category>ASP.NET</category><comments>http://www.hzzhit.com/blog/asp-net/3.html#comment</comments><wfw:comment>http://www.hzzhit.com/blog/</wfw:comment><wfw:commentRss>http://www.hzzhit.com/blog/feed.asp?cmt=3</wfw:commentRss><trackback:ping>http://www.hzzhit.com/blog/cmd.asp?act=tb&amp;id=3&amp;key=2827c7fc</trackback:ping></item><item><title>if 条件语句</title><author>a@b.com (shine)</author><link>http://www.hzzhit.com/blog/asp-net/2.html</link><pubDate>Thu, 12 Feb 2009 20:01:25 +0800</pubDate><guid>http://www.hzzhit.com/blog/asp-net/2.html</guid><description><![CDATA[<p><strong>理解if语句的语法<br /><br /></strong>　　if语句的语法格式如下(if和else是关键字)：<br /><br />&nbsp;</p><div id="highlighter"><span id="codeHigh"><span style="color: #0000ff">if</span> ( booleanExpression )<br />　statement-1;<br /><span style="color: #0000ff">else</span><br />　statement-2;<br /></span></div><p><br />　　如果<em>booleanExpression</em>求值为true，就运行 <em>statement</em><em>-</em><em>1</em>；否则就运行<em>statement</em><em>-</em><em>2</em>。else关键字和后续的<em>statement</em><em>-</em><em>2</em>是可有可无的。如果没有else子句，那么在<em>booleanExpression</em>为false的前提下，什么都不会发生。<br /><br />　　例如，以下if语句用于递增一个秒表的秒针(暂时忽略分钟)。如果seconds的值是59，就重置为0；否则就使用操作符++来递增：<br /><br />&nbsp;</p><div id="highlighter"><span id="codeHigh"><span style="color: #0000ff">int</span> seconds;<br />...<br /><span style="color: #0000ff">if</span> (seconds == 59)<br />seconds = 0;<br /><span style="color: #0000ff">else</span><br />seconds++;<br /></span></div><p><br />　　只使用布尔表达式！<br /><br />　　if语句中的表达式必须放在一对圆括号中。除此之外，表达式必须是布尔表达式。在另一些语言中(尤其是C和C++)，还可以使用一个整数表达式，编译器能自动将整数值转换成true(非零值)或false(零值)。C#不允许这样做。如果写这样的一个表达式，编译器会报错。<br /><br />　　假如在if语句中不慎写了一个赋值表达式，而不是执行一个相等性测试，C#编译器也能识别你的错误。例如：<br /><br />&nbsp;</p><div id="highlighter"><span id="codeHigh"><span style="color: #0000ff">int</span> seconds;<br />...<br /><span style="color: #0000ff">if</span> (seconds = 59) <span style="color: #008000">// 编译时错误</span><br />...<br /><span style="color: #0000ff">if</span> (seconds == 59) <span style="color: #008000">// 正确</span><br /></span></div><p><br /><br />　　不慎而写成赋值表达式，是C和C++程序容易出现bug的另一个原因。在C和C++中，会将所赋的值(59)悄悄地转换成一个布尔值(任何非零的值都会被视为true)，造成每次都必定执行if语句之后的代码。<br /><br />　　最后，可以将一个布尔变量作为表达式使用，如下例所示：<br /><br />&nbsp;</p><div id="highlighter"><span id="codeHigh"><span style="color: #0000ff">bool</span> inWord;<br />...<br /><span style="color: #0000ff">if</span> (inWord == <span style="color: #0000ff">true</span>) <span style="color: #008000">// 可以，但不常用</span><br />...<br /><span style="color: #0000ff">if</span> (inWord) <span style="color: #008000">// 更好</span><br /><br /></span></div><p>　　<strong>使用块来分组语句</strong><br /><br />　　有时，需要在一个布尔表达式为true的前提下运行两个或者更多的语句。可以将要运行的语句分组到一个新方法中，然后调用那个方法。但是，一个更简单的做法是将语句分组到一个块(block)中。块是指用一对大括号来封闭的一系列语句。在下例中，两个语句将seconds变量重置为零，并使minutes变量递增。我们用一个块来分组这两个语句。假如seconds的值等于59，就执行该块：<br /><br />&nbsp;</p><div id="highlighter"><span id="codeHigh"><span style="color: #0000ff">int</span> seconds = 0;<br /><span style="color: #0000ff">int</span> minutes = 0;<br />...<br /><br /><span style="color: #0000ff">if</span> (seconds == 59)<br />{<br />seconds = 0;<br />minutes++;<br />}<br /><span style="color: #0000ff">else</span><br />seconds++;<br /></span></div><p><br />　　重要提示 假如遗漏大括号，将造成两个严重后果。首先，C#编译器只将第一个语句(seconds=0)与if语句关联起来，下一个语句(minutes++)将不再成为if语句的一部分。其次，当编译器遇到else关键字时，不会将它与前一个if语句关联起来，所以会报告语法错误</p><p>eg</p><p>&nbsp;if (this.Session[&quot;name&quot;] == null)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; base.Response.Redirect(&quot;login.aspx&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>]]></description><category>ASP.NET</category><comments>http://www.hzzhit.com/blog/asp-net/2.html#comment</comments><wfw:comment>http://www.hzzhit.com/blog/</wfw:comment><wfw:commentRss>http://www.hzzhit.com/blog/feed.asp?cmt=2</wfw:commentRss><trackback:ping>http://www.hzzhit.com/blog/cmd.asp?act=tb&amp;id=2&amp;key=2e9228b2</trackback:ping></item></channel></rss>
