<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>守望轩 &#187; Asp.net</title>
	<atom:link href="http://www.watch-life.net/category/aspnet/feed" rel="self" type="application/rss+xml" />
	<link>http://www.watch-life.net</link>
	<description>关注IT,审视自我,守望生活, 宁静雅致的小轩馆.</description>
	<lastBuildDate>Sat, 13 Mar 2010 15:38:55 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>防止刷新重复提交数据解决方法的分析</title>
		<link>http://www.watch-life.net/aspnet/refresh-no-resubmit.html</link>
		<comments>http://www.watch-life.net/aspnet/refresh-no-resubmit.html#comments</comments>
		<pubDate>Fri, 11 Jul 2008 17:19:17 +0000</pubDate>
		<dc:creator>xjb</dc:creator>
				<category><![CDATA[Asp.net]]></category>
		<category><![CDATA[分析]]></category>
		<category><![CDATA[刷新]]></category>
		<category><![CDATA[解决方法]]></category>
		<category><![CDATA[重复提交]]></category>

		<guid isPermaLink="false">http://www.watch-life.net/?p=153</guid>
		<description><![CDATA[在Asp.net开发中，浏览器刷新重复触发事件，导致重复提交的问题，下面有几种解决方法，我针对适用情况和利弊做一个简单的分析。
方法一：检测数据表，看是否有相同的数据。这种方法对插入数据可能意义更大些，不过如何定义是相同的数据，是个麻烦的事。同时，如果不是插入数据，是删除呢，就不适用了。
方法二：提交后，转向一个过渡页面，然后再从过渡页面返回到当前的页面。这就要求在提交后，要把当前页面的URL地址作为参数传过去，同时不能保存缓存，否则“后退”带来不良后果。不过，如果是简单的删除，似乎转来转去太麻烦了。
方法三：用JavaScript捕捉F5事件。比如有如下代码：

window.document.onkeydown = KeyStroke;
function KeyStroke()
　　{
　　         var key = event.keyCode;
　　         event.srcElement.releaseCapture();
　         　if(key == 116)
　　        {
　　            [...]]]></description>
			<content:encoded><![CDATA[<p>在Asp.net开发中，浏览器刷新重复触发事件，导致重复提交的问题，下面有几种<a href="http://www.watch-life.net/aspnet/refresh-no-resubmit.html">解决方法</a>，我针对适用情况和利弊做一个简单的分析。</p>
<p>方法一：检测数据表，看是否有相同的数据。这种方法对插入数据可能意义更大些，不过如何定义是相同的数据，是个麻烦的事。同时，如果不是插入数据，是删除呢，就不适用了。</p>
<p>方法二：提交后，转向一个过渡页面，然后再从过渡页面返回到当前的页面。这就要求在提交后，要把当前页面的URL地址作为参数传过去，同时不能保存缓存，否则“后退”带来不良后果。不过，如果是简单的删除，似乎转来转去太麻烦了。</p>
<p>方法三：用JavaScript捕捉F5事件。比如有如下代码：</p>
<div  class="code">
window.document.onkeydown = KeyStroke;<br />
function KeyStroke()<br />
　　{<br />
　　         var key = event.keyCode;<br />
　　         event.srcElement.releaseCapture();<br />
　         　if(key == 116)<br />
　　        {<br />
　　              event.keyCode=0;<br />
　　            event.returnValue=false;<br />
　　        }<br />
　　}
</div>
<p>似乎不错，禁用了F5，不过如果浏览器禁用了js咋办，如果用右键来刷新咋办？禁用右键么？不能为了实现一个功能来禁用这禁用那的，不合情理。</p>
<p>方法四：基于session和ViewState来处理。最好的例子见：<a href="http://cncxz.cnblogs.com/archive/2005/12/25/304141.html" target="_blank">http://cncxz.cnblogs.com/archive/2005/12/25/304141.html</a>。这个方法的原理是&#8221;在页面代码执行的末尾将当前的ViewState写到一个Session中，而在页面加载时则判断该Session值是否与当前ViewState相等（其实Session值恰好是ViewState的前一状态），若不等，则是正常的postback，若是相等则是浏览器刷新&#8221;.这个方法还不错，不过对session占用如此多的服务器资源，我有些担心。</p>
<p>方法五：用ajax提交操作。当然，这是从源头上就没有刷新的问题，因为postback都没有了，不存在防止刷新提交问题。有些偏题。</p>
<p>方法六：通过   HttpContext   对象传递给页面处理。这个方法是msdn给的一个方法，原理我就不赘述了，详见<a href="http://msdn.microsoft.com/zh-cn/library/ms379557(VS.80).aspx" target="_blank">http://msdn.microsoft.com/zh-cn/library/ms379557(VS.80).aspx</a>。我觉得这个方法不错，根据asp.net的运行机制来处理此问题，就比较游刃有余了。所以这个方法我推荐使用，虽然是msdn的这篇文章是2004年的老文了，现在看来依然很不错。</p>
<p>如果你觉得有其他更好的方法，不妨告诉我！ <img src='http://www.watch-life.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>本文地址：<a href="http://www.watch-life.net/aspnet/refresh-no-resubmit.html">http://www.watch-life.net/aspnet/refresh-no-resubmit.html</a></p>
<p class="akst_link">
</p>
	<h4>你可能也会喜欢以下文章：</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.watch-life.net/visual-studio/visual-web-developer-2008-has-a-new-style-builder-dialog.html" title="web developer tips (10):Visual Web Developer 2008中新的样式生成器 (2009-06-23)">web developer tips (10):Visual Web Developer 2008中新的样式生成器</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/improve-performance-of-page-and-server-control-processing.html" title="web developer tips (22):提高页面和服务器控件加载速度 (2009-07-15)">web developer tips (22):提高页面和服务器控件加载速度</a> (0)</li>
	<li><a href="http://www.watch-life.net/programming-notes/html-table-2-excel.html" title="html页面表格导出到excel总结 (2008-06-23)">html页面表格导出到excel总结</a> (3)</li>
	<li><a href="http://www.watch-life.net/visual-studio/create-an-asp-net-dynamic-data-web-site.html" title="web developer tips (61):如何创建Asp.net Dynamic Data网站 (2009-11-09)">web developer tips (61):如何创建Asp.net Dynamic Data网站</a> (0)</li>
	<li><a href="http://www.watch-life.net/aspnet/control-menu-no-postback.html" title="如何不使用让menu控件不回发（postback） (2007-11-08)">如何不使用让menu控件不回发（postback）</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/display-css-html-errors-as-warnings-or-as-errors.html" title="web developer tips (24):显示html/css的警告错误或错误 (2009-07-17)">web developer tips (24):显示html/css的警告错误或错误</a> (0)</li>
	<li><a href="http://www.watch-life.net/vs2005/vss2005-internet-suport.html" title="设置VSS2005使支持通过Internet访问（转） (2007-07-09)">设置VSS2005使支持通过Internet访问（转）</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/absolute-position-controls-on-copy-paste-or-drag-drop-from-toolbox.html" title="web developer tips (18):从工具箱粘贴或拖拽控件时进行绝对定位 (2009-07-07)">web developer tips (18):从工具箱粘贴或拖拽控件时进行绝对定位</a> (0)</li>
</ul>

转载请注明作者，出处，以及原始超链接。<br />评论数：4 | <b><a href='http://www.watch-life.net/aspnet/refresh-no-resubmit.html#comment'>评论这篇文章</a></b>|关注作者最近动态,欢迎 follow me <a href='https://twitter.com/xjb' target='_blank'>xjb@twitter.com</a>|联络作者：iamxjb@gmail.com<br/>© 2010 守望轩 <a href='http://www.watch-life.net/aspnet/refresh-no-resubmit.html'>www.watch-life.net</a>]]></content:encoded>
			<wfw:commentRss>http://www.watch-life.net/aspnet/refresh-no-resubmit.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>让GridView中CheckBox列支持FireFox</title>
		<link>http://www.watch-life.net/aspnet/gridview-checkbox-firefox.html</link>
		<comments>http://www.watch-life.net/aspnet/gridview-checkbox-firefox.html#comments</comments>
		<pubDate>Tue, 08 Jul 2008 09:48:39 +0000</pubDate>
		<dc:creator>xjb</dc:creator>
				<category><![CDATA[Asp.net]]></category>
		<category><![CDATA[CheckBox]]></category>
		<category><![CDATA[FireFox]]></category>
		<category><![CDATA[gridview]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[兼容]]></category>

		<guid isPermaLink="false">http://www.watch-life.net/?p=151</guid>
		<description><![CDATA[在Asp.net中，可以通过模板列，在Gridview中实现CheckBox列的实现，相关的代码并不复杂，你可以参考这里，我抽取的部分代码如下：
&#60;script&#160;language=&#8221;javascript&#8221;&#160;type=&#8221;text/javascript&#8221;&#62;&#160;&#160;&#160;&#160;function&#160;selectAll(obj)
&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&#160;theTable&#160;&#160;=&#160;obj.parentElement.parentElement.parentElement;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&#160;i;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&#160;j&#160;=&#160;obj.parentElement.cellIndex;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;for(i=0;i&#60;theTable.rows.length;i++)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&#160;objCheckBox&#160;=&#160;theTable.rows[i].cells[j].firstChild;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(objCheckBox.checked!=null)objCheckBox.checked&#160;=
&#160;&#160;&#160;&#160;&#60;/script&#62;

&#60;asp:GridView&#160;ID=&#8221;GridView1&#8243;&#160;runat=&#8221;server&#8221;&#160;AllowPaging=&#8221;True&#34;
	&#160;AutoGenerateColumns=&#8221;False&#8221;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;DataKeyNames=&#8221;id&#8221;&#160;DataSourceID=&#8221;AccessDataSource1&#8243;&#160;
	AllowSorting=&#8221;True&#8221;&#160;OnDataBinding=&#8221;GridView1_DataBinding&#8221;&#160;OnRowDataBound=&#8221;GridView1_RowDataBound&#8221;&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;Columns&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;asp:TemplateField&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;ItemTemplate&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;asp:CheckBox&#160;ID=&#8221;CheckBox1&#8243;&#160;runat=&#8221;server&#8221;&#160;Checked=&#8221;True&#8221;&#160;Text=&#8217;&#60;%#DataBinder.Eval(Container.DataItem,&#8221;id&#8221;)&#160;%&#62;&#8217;&#160;/&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;/ItemTemplate&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;HeaderTemplate&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#38;nbsp;&#60;input&#160;id=&#8221;CheckAll&#8221;&#160;type=&#8221;checkbox&#8221;&#160;onclick=&#8221;selectAll(this);&#8221;&#160;/&#62;全选&#160;&#160;&#160;&#160;&#60;/HeaderTemplate&#62;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
&#60;asp:BoundField&#160;DataField=&#8221;id&#8221;&#160;HeaderText=&#8221;id&#8221;&#160;InsertVisible=&#8221;False&#8221;&#160;ReadOnly=&#8221;True&#8221;&#160;&#160;&#160;&#160;
&#160;SortExpression=&#8221;id&#8221;&#160;/&#62;
&#160;&#160;&#60;asp:BoundField&#160;DataField=&#8221;name&#8221;&#160;HeaderText=&#8221;name&#8221;&#160;SortExpression=&#8221;name&#8221;&#160;/&#62;&#160;
&#160;&#160;&#60;asp:BoundField&#160;DataField=&#8221;sex&#8221;&#160;HeaderText=&#8221;sex&#8221;&#160;SortExpression=&#8221;sex&#8221;&#160;/&#62;&#160;
&#160;&#160;&#60;asp:BoundField&#160;DataField=&#8221;deptid&#8221;&#160;HeaderText=&#8221;deptid&#8221;&#160;SortExpression=&#8221;deptid&#8221;&#160;/&#62;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;/Columns&#62;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;/asp:GridView&#62;&#160;&#160;
js代码中的selectAll(obj)方法在IE中可以正常使用。昨天，一朋友做测试，发现在FireFox中不支持，让我帮着找找原因，估计是js的代码有不兼容Firefox的，查有关资料，原来在firefox不支持parentElement，但支持parentNode，于是把原来的js代码修改了一下，通过obj.parentNode.parentNode.parentNode 来获取表格对象（GridView编译后形成的表格），不过要找到CheckBox对象要麻烦点，因为没法通过obj.parentElement.cellIndex 来定位找到ChecKbox所在位置了，只能通过循环某一行的单元格来查找了。具体的代码如下：

function&#160;select_all(obj)&#160;&#160;&#160;
{&#160;&#160;&#160;
&#160;&#160;&#160;&#160;var&#160;theTable&#160;&#160;=&#160;obj.parentNode.parentNode.parentNode;&#160;&#160;&#160;
&#160;&#160;&#160;&#160;var&#160;j&#160;=&#160;obj.parentNode.cellIndex;&#160;&#160;&#160;
&#160;&#160;
&#160;&#160;&#160;&#160;for(var&#160;i=0;&#160;i&#60;theTable.rows.length;&#160;i++)&#160;&#160;&#160;
&#160;&#160;&#160;&#160;{&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&#160;objCheckBox&#160;=&#160;GetCheckBoxObj(theTable.rows[i].cells[j]);&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(objCheckBox.checked&#160;!=&#160;null)&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;objCheckBox.checked&#160;=&#160;obj.checked;&#160;&#160;&#160;
&#160;&#160;&#160;&#160;}&#160;&#160;&#160;
}&#160;&#160;
function&#160;GetCheckBoxObj(objCell)&#160;&#160;&#160;
{&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;for(var&#160;i=&#160;0;&#160;i&#160;&#60;&#160;objCell.childNodes.length;&#160;i++)&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;{&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(objCell.childNodes[i].id)&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&#160;objCell.childNodes[i];&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;}&#160;&#160;&#160;
}&#160;&#160;&#160;
&#160;&#160;
如此修改后，这个checkbox就可以兼容IE和FireFox了。 
看来要是在web开发来要想兼容IE和Firefox，这个工作还是蛮艰巨的。有关firefox与ie 的javascript区别 的你看看这里，总结非常详细。不但是js，css也有很多不一样的地方。嘿嘿，由此我有点怀念IE一统天下的年代了,不过我觉得一般企业级的应用还是不专门考虑FireFox了，除非做门户网站。
本文地址：http://www.watch-life.net/aspnet/gridview-checkbox-firefox.html


	你可能也会喜欢以下文章：
	
	web developer tips (52):部署Asp.net web应用须设置debug为false (0)
	web developer tips (24):显示html/css的警告错误或错误 (0)
	设置VSS2005使支持通过Internet访问（转） (0)
	防止刷新重复提交数据解决方法的分析 (4)
	关于二级域名(泛二级域名)的实现 (0)
	温故知新的经典&#8211;书评《Programming C# 》中文版第4版 (1)
	web developer tips (45):如何改变动态数据文件夹的位置 (0)
	web developer tips (56):手动更新JScript的智能感知 (0)


转载请注明作者，出处，以及原始超链接。评论数：0 &#124; 评论这篇文章&#124;关注作者最近动态,欢迎 follow me xjb@twitter.com&#124;联络作者：iamxjb@gmail.com© 2010 守望轩 www.watch-life.net]]></description>
			<content:encoded><![CDATA[<p>在Asp.net中，可以通过模板列，在Gridview中实现CheckBox列的实现，相关的代码并不复杂，你可以参考<a href="http://www.cnblogs.com/eddie005/archive/2006/07/04/442837.html">这里</a>，我抽取的部分代码如下：</p>
<div class="code"><span style="color: #0000ff">&lt;</span><span style="color: #800000">script&nbsp;</span><span style="color: #ff0000">language</span><span style="color: #0000ff">=&#8221;javascript&#8221;</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">=&#8221;text/javascript&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">function</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;selectAll(obj)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">var</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;theTable&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;obj.parentElement.parentElement.parentElement;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">var</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">var</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;j&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;obj.parentElement.cellIndex;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">for</span><span style="color: #000000; background-color: #f5f5f5">(i</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">0</span><span style="color: #000000; background-color: #f5f5f5">;i</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">theTable.rows.length;i</span><span style="color: #000000; background-color: #f5f5f5">++</span><span style="color: #000000; background-color: #f5f5f5">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">var</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;objCheckBox&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;theTable.rows[i].cells[j].firstChild;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">if</span><span style="color: #000000; background-color: #f5f5f5">(objCheckBox.checked</span><span style="color: #000000; background-color: #f5f5f5">!=</span><span style="color: #0000ff; background-color: #f5f5f5">null</span><span style="color: #000000; background-color: #f5f5f5">)objCheckBox.checked&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:GridView&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">=&#8221;GridView1&#8243;</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">=&#8221;server&#8221;</span><span style="color: #ff0000">&nbsp;AllowPaging</span><span style="color: #0000ff">=&#8221;True&quot;</span><br/><br />
	<span style="color: #ff0000">&nbsp;AutoGenerateColumns</span><span style="color: #0000ff">=&#8221;False&#8221;</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataKeyNames</span><span style="color: #0000ff">=&#8221;id&#8221;</span><span style="color: #ff0000">&nbsp;DataSourceID</span><span style="color: #0000ff">=&#8221;AccessDataSource1&#8243;</span><span style="color: #ff0000">&nbsp;</span><br/><br />
	<span style="color: #ff0000">AllowSorting</span><span style="color: #0000ff">=&#8221;True&#8221;</span><span style="color: #ff0000">&nbsp;OnDataBinding</span><span style="color: #0000ff">=&#8221;GridView1_DataBinding&#8221;</span><br/><span style="color: #ff0000">&nbsp;OnRowDataBound</span><span style="color: #0000ff">=&#8221;GridView1_RowDataBound&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Columns</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:TemplateField</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:CheckBox&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">=&#8221;CheckBox1&#8243;</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">=&#8221;server&#8221;</span><br/><span style="color: #ff0000">&nbsp;Checked</span><span style="color: #0000ff">=&#8221;True&#8221;</span><span style="color: #ff0000">&nbsp;Text</span><span style="color: #0000ff">=&#8217;&lt;%#DataBinder.Eval(Container.DataItem,&#8221;id&#8221;)&nbsp;</span><span style="color: #ff0000">%</span><span style="color: #0000ff">&gt;&#8217;&nbsp;/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">HeaderTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">&amp;nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">=&#8221;CheckAll&#8221;</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">=&#8221;checkbox&#8221;</span><span style="color: #ff0000">&nbsp;onclick</span><span style="color: #0000ff">=&#8221;selectAll(this);&#8221;</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">全选&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">HeaderTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:BoundField&nbsp;</span><span style="color: #ff0000">DataField</span><span style="color: #0000ff">=&#8221;id&#8221;</span><span style="color: #ff0000">&nbsp;HeaderText</span><span style="color: #0000ff">=&#8221;id&#8221;</span><span style="color: #ff0000">&nbsp;InsertVisible</span><span style="color: #0000ff">=&#8221;False&#8221;</span><span style="color: #ff0000">&nbsp;ReadOnly</span><span style="color: #0000ff">=&#8221;True&#8221;</span><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;</span></p>
<p><span style="color: #ff0000">&nbsp;SortExpression</span><span style="color: #0000ff">=&#8221;id&#8221;</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:BoundField&nbsp;</span><span style="color: #ff0000">DataField</span><span style="color: #0000ff">=&#8221;name&#8221;</span><span style="color: #ff0000">&nbsp;HeaderText</span><span style="color: #0000ff">=&#8221;name&#8221;</span><span style="color: #ff0000">&nbsp;SortExpression</span><span style="color: #0000ff">=&#8221;name&#8221;</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:BoundField&nbsp;</span><span style="color: #ff0000">DataField</span><span style="color: #0000ff">=&#8221;sex&#8221;</span><span style="color: #ff0000">&nbsp;HeaderText</span><span style="color: #0000ff">=&#8221;sex&#8221;</span><span style="color: #ff0000">&nbsp;SortExpression</span><span style="color: #0000ff">=&#8221;sex&#8221;</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:BoundField&nbsp;</span><span style="color: #ff0000">DataField</span><span style="color: #0000ff">=&#8221;deptid&#8221;</span><span style="color: #ff0000">&nbsp;HeaderText</span><span style="color: #0000ff">=&#8221;deptid&#8221;</span><span style="color: #ff0000">&nbsp;SortExpression</span><span style="color: #0000ff">=&#8221;deptid&#8221;</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Columns</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:GridView</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;</span></div>
<p>js代码中的selectAll(obj)方法在IE中可以正常使用。昨天，一朋友做测试，发现在FireFox中不支持，让我帮着找找原因，估计是js的代码有不兼容Firefox的，查有关资料，原来在firefox不支持parentElement，但支持parentNode，于是把原来的js代码修改了一下，通过obj.parentNode.parentNode.parentNode 来获取表格对象（GridView编译后形成的表格），不过要找到CheckBox对象要麻烦点，因为没法通过obj.parentElement.cellIndex 来定位找到ChecKbox所在位置了，只能通过循环某一行的单元格来查找了。具体的代码如下：</p>
<div class="code"><span style="color: #000000"><br />
</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;select_all(obj)&nbsp;&nbsp;&nbsp;<br />
{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;theTable&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;obj.parentNode.parentNode.parentNode;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;j&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;obj.parentNode.cellIndex;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">theTable.rows.length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;objCheckBox&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;GetCheckBoxObj(theTable.rows[i].cells[j]);&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(objCheckBox.checked&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objCheckBox.checked&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;obj.checked;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />
}&nbsp;&nbsp;</p>
<p></span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;GetCheckBoxObj(objCell)&nbsp;&nbsp;&nbsp;<br />
{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;objCell.childNodes.length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(objCell.childNodes[i].id)&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;objCell.childNodes[i];&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />
}&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span></div>
<p>如此修改后，这个<a href="http://www.watch-life.net/aspnet/gridview-checkbox-firefox.html">checkbox就可以兼容IE和FireFox</a>了。 </p>
<p>看来要是在web开发来要想兼容IE和Firefox，这个工作还是蛮艰巨的。有关firefox与ie 的javascript区别 的你看看<a href="http://www.cnblogs.com/JustinYoung/articles/javascript-on-FireFox-and-IE.html" target="_blank">这里</a>，总结非常详细。不但是js，css也有很多不一样的地方。嘿嘿，由此我有点怀念IE一统天下的年代了,不过我觉得一般企业级的应用还是不专门考虑FireFox了，除非做门户网站。<br />
本文地址：<a href="http://www.watch-life.net/aspnet/gridview-checkbox-firefox.html">http://www.watch-life.net/aspnet/gridview-checkbox-firefox.html</a></p>
<p class="akst_link">
</p>
	<h4>你可能也会喜欢以下文章：</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.watch-life.net/visual-studio/deploying-your-asp-net-web-application-debug-false-should-be-set-in-web-config.html" title="web developer tips (52):部署Asp.net web应用须设置debug为false (2009-09-27)">web developer tips (52):部署Asp.net web应用须设置debug为false</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/display-css-html-errors-as-warnings-or-as-errors.html" title="web developer tips (24):显示html/css的警告错误或错误 (2009-07-17)">web developer tips (24):显示html/css的警告错误或错误</a> (0)</li>
	<li><a href="http://www.watch-life.net/vs2005/vss2005-internet-suport.html" title="设置VSS2005使支持通过Internet访问（转） (2007-07-09)">设置VSS2005使支持通过Internet访问（转）</a> (0)</li>
	<li><a href="http://www.watch-life.net/aspnet/refresh-no-resubmit.html" title="防止刷新重复提交数据解决方法的分析 (2008-07-12)">防止刷新重复提交数据解决方法的分析</a> (4)</li>
	<li><a href="http://www.watch-life.net/programming-notes/2-domainname-realization.html" title="关于二级域名(泛二级域名)的实现 (2007-06-28)">关于二级域名(泛二级域名)的实现</a> (0)</li>
	<li><a href="http://www.watch-life.net/technology-book-review/programming-csharp-bookreview.html" title="温故知新的经典&#8211;书评《Programming C# 》中文版第4版 (2007-10-30)">温故知新的经典&#8211;书评《Programming C# 》中文版第4版</a> (1)</li>
	<li><a href="http://www.watch-life.net/visual-studio/change-the-dynamicdata-folder-location.html" title="web developer tips (45):如何改变动态数据文件夹的位置 (2009-09-09)">web developer tips (45):如何改变动态数据文件夹的位置</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/update-jscript-intellisense-manually.html" title="web developer tips (56):手动更新JScript的智能感知 (2009-10-29)">web developer tips (56):手动更新JScript的智能感知</a> (0)</li>
</ul>

转载请注明作者，出处，以及原始超链接。<br />评论数：0 | <b><a href='http://www.watch-life.net/aspnet/gridview-checkbox-firefox.html#comment'>评论这篇文章</a></b>|关注作者最近动态,欢迎 follow me <a href='https://twitter.com/xjb' target='_blank'>xjb@twitter.com</a>|联络作者：iamxjb@gmail.com<br/>© 2010 守望轩 <a href='http://www.watch-life.net/aspnet/gridview-checkbox-firefox.html'>www.watch-life.net</a>]]></content:encoded>
			<wfw:commentRss>http://www.watch-life.net/aspnet/gridview-checkbox-firefox.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WebResponse 跨域访问</title>
		<link>http://www.watch-life.net/aspnet/webresponse-cross-site-visit.html</link>
		<comments>http://www.watch-life.net/aspnet/webresponse-cross-site-visit.html#comments</comments>
		<pubDate>Mon, 07 Jul 2008 03:10:09 +0000</pubDate>
		<dc:creator>xjb</dc:creator>
				<category><![CDATA[Asp.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[WebResponse]]></category>
		<category><![CDATA[xmlhttp]]></category>
		<category><![CDATA[跨域]]></category>

		<guid isPermaLink="false">http://www.watch-life.net/?p=149</guid>
		<description><![CDATA[前两天，一个朋友让我帮他写这样一个程序：在asp.net里面访问asp的页面，把数据提交对方的数据库后，根据返回的值（返回值为：OK或ERROR），如果为OK再把填入本地数据库。当时，想当然，觉得很简单，用js的xmlhttp ，如果根据response 的值是“OK”就执行提交本地数据库。很快写完发过去，让朋友试试，一试发现不行，后来一问，原来是跨域访问，我给忽略了，于是让朋友把asp改成web service，可朋友说程序是合作公司做的，只会asp，不会用web service ，狂晕ing。没办法，只能请出asp.net的 WebResponse了，很多网站采集程序都是用这个。第一版写完了，倒是可以跨域访问了，不过是乱码，调整有关编码的方式，终于可以了。这个应用虽小可是涉及的知识点不少：
1、xmlhttp 不能跨域提交。
当然XMLHttpRequest还是权宜的解决的方法，可以参考思归写的一篇文章：http://blog.joycode.com/saucer/archive/2006/10/03/84572.aspx
2、webresponse可以进行跨域访问，不过要注意
1）、get和post的区别。
2）、注意Timeout的问题。
这些都是简单的程序，记下来备忘，高手就不必看了。
不废话了，下面是相关的c#代码：

///&#160;&#60;summary&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;///&#160;使用Post方法发送数据
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;///&#160;&#60;/summary&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;///&#160;&#60;param&#160;name=”pi_strPostURl”&#62;提交地址&#60;/param&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;///&#160;&#60;param&#160;name=”pi_strParm”&#62;参数&#60;/param&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;///&#160;&#60;returns&#62;&#60;/returns&#62;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;public&#160;static&#160;string&#160;PostResponse(string&#160;pi_strPostURl,&#160;string&#160;pi_strParm)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;try
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//编码
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Encoding&#160;t_Encoding&#160;=&#160;Encoding.GetEncoding(“GB2312“);&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Uri&#160;t_Uri&#160;=&#160;new&#160;Uri(pi_strPostURl);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;byte[]&#160;paramBytes&#160;=&#160;t_Encoding.GetBytes(pi_strParm);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;WebRequest&#160;t_WebRequest&#160;=&#160;WebRequest.Create(t_Uri);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;t_WebRequest.Timeout&#160;=&#160;100000;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//设置ContentType
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;t_WebRequest.ContentType&#160;=&#160;“application/x-www-form-urlencoded“;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;t_WebRequest.Method&#160;=&#160;EnumMethod.POST.ToString();&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//初始化
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;using&#160;(Stream&#160;t_REStream&#160;=&#160;t_WebRequest.GetRequestStream())
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//发送数据
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;requestStream.Write(paramBytes,&#160;0
,&#160;paramBytes.Length);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;WebResponse&#160;t_WebResponse&#160;=
&#160;t_WebRequest.GetResponse();
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;using&#160;(StreamReader&#160;t_StreamReader&#160;=&#160;new&#160;StreamReader(t_WebResponse&#160;.GetResponseStream(),&#160;t_Encoding))
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&#160;t_StreamReader.ReadToEnd();
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;catch
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&#160;“ERROR“;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;
public&#160;static&#160;string&#160;GetResponse(string&#160;pi_strPostURl,&#160;string&#160;pi_strParm)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;try
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//编码
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Encoding&#160;t_Encoding&#160;=&#160;Encoding.GetEncoding(“GB2312“);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Uri&#160;t_Uri&#160;=&#160;new&#160;Uri(string.Format(“{0}?{1}“,&#160;pi_strPostURl,&#160;pi_strParm));
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;WebRequest&#160;t_WebRequest&#160;=
&#160;WebRequest.Create(t_Uri);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;t_WebRequest.Timeout&#160;=&#160;100000;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;t_WebRequest.ContentType&#160;=&#160;“application/x-www-form-urlencoded“;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;t_WebRequest.Method&#160;=&#160;EnumMethod.GET.ToString();&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;WebResponse&#160;t_WebResponse&#160;=
&#160;t_WebRequest.GetResponse();
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;using&#160;(StreamReader&#160;t_StreamReader&#160;=&#160;new&#160;StreamReader(t_WebResponse.GetResponseStream(),&#160;t_Encoding))
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&#160;t_StreamReader.ReadToEnd();
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;catch&#160;(Exception&#160;e)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&#160;e.ToString();
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
public&#160;static&#160;string&#160;AtionResponse(string&#160;pi_Url,&#160;EnumMethod&#160;pi_Method)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;string&#160;t_strUrlPath=“”;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;string&#160;t_parm&#160;=&#160;“”;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Uri&#160;&#160;t_Url&#160;=&#160;new&#160;Uri(pi_Url);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;t_parm=&#160;t_Url.Query;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if&#160;(parmString.StartsWith(“?“))
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;t_parm&#160;=&#160;t_parm.Remove(0,&#160;1);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;t_strUrlPath&#160;=&#160;“http://“&#160;+&#160;t_Url&#160;.Authority&#160;+&#160;t_Url&#160;.AbsolutePath;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&#160;GetResponse(t_strUrlPath,&#160;t_parm,&#160;pi_Method);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;public&#160;enum&#160;EnumMethod
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;POST,
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;GET
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;

本文地址：http://www.watch-life.net/aspnet/webresponse-cross-site-visit.html


	你可能也会喜欢以下文章：
	
	防止刷新重复提交数据解决方法的分析 (4)
	web developer tips (2):样式应用工具栏的工作模式 (0)
	比较郁闷的textbox（asp.net 2.0）控件 (0)
	让GridView中CheckBox列支持FireFox (0)
	Sqlite数据库的加密 (0)
	web developer tips (62):在vs工具箱添加AJAX控件工具包 (0)
	html页面表格导出到excel总结 (3)
	&#8220;Visual Studio 2008&#8243;背后的勃勃野心 (0)


转载请注明作者，出处，以及原始超链接。评论数：1 &#124; 评论这篇文章&#124;关注作者最近动态,欢迎 follow me xjb@twitter.com&#124;联络作者：iamxjb@gmail.com© 2010 守望轩 www.watch-life.net]]></description>
			<content:encoded><![CDATA[<p>前两天，一个朋友让我帮他写这样一个程序：在asp.net里面访问asp的页面，把数据提交对方的数据库后，根据返回的值（返回值为：OK或ERROR），如果为OK再把填入本地数据库。当时，想当然，觉得很简单，用js的xmlhttp ，如果根据response 的值是“OK”就执行提交本地数据库。很快写完发过去，让朋友试试，一试发现不行，后来一问，原来是跨域访问，我给忽略了，于是让朋友把asp改成web service，可朋友说程序是合作公司做的，只会asp，不会用web service ，狂晕ing。没办法，只能请出asp.net的 <a href="http://msdn.microsoft.com/en-us/library/system.net.webresponse.aspx" target="_blank">WebResponse</a>了，很多网站采集程序都是用这个。第一版写完了，倒是可以跨域访问了，不过是乱码，调整有关编码的方式，终于可以了。这个应用虽小可是涉及的知识点不少：<br />
1、xmlhttp 不能跨域提交。<br />
当然XMLHttpRequest还是权宜的解决的方法，可以参考<a href="http://blog.joycode.com/saucer/Default.aspx" target="_blank">思归</a>写的一篇文章：<a href="http://blog.joycode.com/saucer/archive/2006/10/03/84572.aspx" target="_blank">http://blog.joycode.com/saucer/archive/2006/10/03/84572.aspx</a></p>
<p>2、<a href="http://www.watch-life.net/aspnet/webresponse-cross-site-visit.html">webresponse可以进行跨域访问</a>，不过要注意<br />
1）、get和post的区别。<br />
2）、注意Timeout的问题。</p>
<p>这些都是简单的程序，记下来备忘，高手就不必看了。</p>
<p>不废话了，下面是相关的c#代码：</p>
<div class="code"><span style="color: #000000"><br />
</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;使用Post方法发送数据<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name=”pi_strPostURl”&gt;</span><span style="color: #008000">提交地址</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name=”pi_strParm”&gt;</span><span style="color: #008000">参数</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;returns&gt;&lt;/returns&gt;</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;PostResponse(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;pi_strPostURl,&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;pi_strParm)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">编码</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Encoding&nbsp;t_Encoding&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Encoding.GetEncoding(“GB2312“);&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Uri&nbsp;t_Uri&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Uri(pi_strPostURl);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">[]&nbsp;paramBytes&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;t_Encoding.GetBytes(pi_strParm);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WebRequest&nbsp;t_WebRequest&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;WebRequest.Create(t_Uri);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t_WebRequest.Timeout&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">100000</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">设置ContentType</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t_WebRequest.ContentType&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;“application</span><span style="color: #000000">/</span><span style="color: #000000">x</span><span style="color: #000000">-</span><span style="color: #000000">www</span><span style="color: #000000">-</span><span style="color: #000000">form</span><span style="color: #000000">-</span><span style="color: #000000">urlencoded“;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t_WebRequest.Method&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;EnumMethod.POST.ToString();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">初始化</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;(Stream&nbsp;t_REStream&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;t_WebRequest.GetRequestStream())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">发送数据</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;requestStream.Write(paramBytes,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000"><br />
,&nbsp;paramBytes.Length);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WebResponse&nbsp;t_WebResponse&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000"><br />
&nbsp;t_WebRequest.GetResponse();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;(StreamReader&nbsp;t_StreamReader&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StreamReader(t_WebResponse&nbsp;.GetResponseStream(),&nbsp;t_Encoding))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;t_StreamReader.ReadToEnd();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;“ERROR“;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;GetResponse(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;pi_strPostURl,&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;pi_strParm)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">编码</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Encoding&nbsp;t_Encoding&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Encoding.GetEncoding(“GB2312“);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Uri&nbsp;t_Uri&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Uri(</span><span style="color: #0000ff">string</span><span style="color: #000000">.Format(“{</span><span style="color: #800080">0</span><span style="color: #000000">}</span><span style="color: #000000">?</span><span style="color: #000000">{</span><span style="color: #800080">1</span><span style="color: #000000">}“,&nbsp;pi_strPostURl,&nbsp;pi_strParm));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WebRequest&nbsp;t_WebRequest&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000"><br />
&nbsp;WebRequest.Create(t_Uri);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t_WebRequest.Timeout&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">100000</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t_WebRequest.ContentType&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;“application</span><span style="color: #000000">/</span><span style="color: #000000">x</span><span style="color: #000000">-</span><span style="color: #000000">www</span><span style="color: #000000">-</span><span style="color: #000000">form</span><span style="color: #000000">-</span><span style="color: #000000">urlencoded“;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t_WebRequest.Method&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;EnumMethod.GET.ToString();&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WebResponse&nbsp;t_WebResponse&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000"><br />
&nbsp;t_WebRequest.GetResponse();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;(StreamReader&nbsp;t_StreamReader&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StreamReader(t_WebResponse.GetResponseStream(),&nbsp;t_Encoding))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;t_StreamReader.ReadToEnd();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;e.ToString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;AtionResponse(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;pi_Url,&nbsp;EnumMethod&nbsp;pi_Method)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;t_strUrlPath</span><span style="color: #000000">=</span><span style="color: #000000">“”;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;t_parm&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;“”;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Uri&nbsp;&nbsp;t_Url&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Uri(pi_Url);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t_parm</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;t_Url.Query;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(parmString.StartsWith(“</span><span style="color: #000000">?</span><span style="color: #000000">“))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t_parm&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;t_parm.Remove(</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t_strUrlPath&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;“http:</span><span style="color: #000000">//</span><span style="color: #000000">“&nbsp;+&nbsp;t_Url&nbsp;.Authority&nbsp;+&nbsp;t_Url&nbsp;.AbsolutePath;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;GetResponse(t_strUrlPath,&nbsp;t_parm,&nbsp;pi_Method);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">enum</span><span style="color: #000000">&nbsp;EnumMethod<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;POST,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GET<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;<br />
</span></div>
<p>本文地址：<a href="http://www.watch-life.net/aspnet/webresponse-cross-site-visit.html">http://www.watch-life.net/aspnet/webresponse-cross-site-visit.html</a></p>
<p class="akst_link">
</p>
	<h4>你可能也会喜欢以下文章：</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.watch-life.net/aspnet/refresh-no-resubmit.html" title="防止刷新重复提交数据解决方法的分析 (2008-07-12)">防止刷新重复提交数据解决方法的分析</a> (4)</li>
	<li><a href="http://www.watch-life.net/visual-studio/the-style-application-toolbar-works-in-both-auto-and-manual-modes.html" title="web developer tips (2):样式应用工具栏的工作模式 (2009-05-24)">web developer tips (2):样式应用工具栏的工作模式</a> (0)</li>
	<li><a href="http://www.watch-life.net/aspnet/aspnet-textbox-readonly.html" title="比较郁闷的textbox（asp.net 2.0）控件 (2007-11-07)">比较郁闷的textbox（asp.net 2.0）控件</a> (0)</li>
	<li><a href="http://www.watch-life.net/aspnet/gridview-checkbox-firefox.html" title="让GridView中CheckBox列支持FireFox (2008-07-08)">让GridView中CheckBox列支持FireFox</a> (0)</li>
	<li><a href="http://www.watch-life.net/net-tip/sqlite-encrypted.html" title="Sqlite数据库的加密 (2008-07-25)">Sqlite数据库的加密</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/add-ajax-control-toolkit-to-the-toolbox.html" title="web developer tips (62):在vs工具箱添加AJAX控件工具包 (2009-11-13)">web developer tips (62):在vs工具箱添加AJAX控件工具包</a> (0)</li>
	<li><a href="http://www.watch-life.net/programming-notes/html-table-2-excel.html" title="html页面表格导出到excel总结 (2008-06-23)">html页面表格导出到excel总结</a> (3)</li>
	<li><a href="http://www.watch-life.net/it-review/visual-studio-2008-ambition.html" title="&#8220;Visual Studio 2008&#8243;背后的勃勃野心 (2008-02-10)">&#8220;Visual Studio 2008&#8243;背后的勃勃野心</a> (0)</li>
</ul>

转载请注明作者，出处，以及原始超链接。<br />评论数：1 | <b><a href='http://www.watch-life.net/aspnet/webresponse-cross-site-visit.html#comment'>评论这篇文章</a></b>|关注作者最近动态,欢迎 follow me <a href='https://twitter.com/xjb' target='_blank'>xjb@twitter.com</a>|联络作者：iamxjb@gmail.com<br/>© 2010 守望轩 <a href='http://www.watch-life.net/aspnet/webresponse-cross-site-visit.html'>www.watch-life.net</a>]]></content:encoded>
			<wfw:commentRss>http://www.watch-life.net/aspnet/webresponse-cross-site-visit.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>备忘：base 标签和ShowModalDialog 、showModelessDialog</title>
		<link>http://www.watch-life.net/aspnet/html-base-showmodaldialog-notes.html</link>
		<comments>http://www.watch-life.net/aspnet/html-base-showmodaldialog-notes.html#comments</comments>
		<pubDate>Thu, 24 Jan 2008 05:55:13 +0000</pubDate>
		<dc:creator>xjb</dc:creator>
				<category><![CDATA[Asp.net]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[ShowModalDialog]]></category>
		<category><![CDATA[showModelessDialog]]></category>
		<category><![CDATA[子窗体]]></category>

		<guid isPermaLink="false">http://www.watch-life.net/life-thinking/html-base-showmodaldialog-notes.html</guid>
		<description><![CDATA[在是用ShowModalDialog 弹出子窗体中在标签后，加入后,对于子窗体：
1、POSTBACK后不会打开新窗体。
2、使用window.open()关闭窗体避免弹出另外一个同样的窗口。
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;
附：showModalDialog()、showModelessDialog()方法使用详解
Javascript有许多内建的方法来产生对话框，如：window.alert(), window.confirm(),window.prompt().等。
然而IE提供更多的方法支持对话框。如：
　　showModalDialog() (IE 4+ 支持)
　　showModelessDialog() (IE 5+ 支持)

window.showModalDialog()方法用来创建一个显示HTML内容的模态对话框，由于是对话框，因此它并没有一般用window.open()打开的窗口的所有属性。
window.showModelessDialog()方法用来创建一个显示HTML内容的非模态对话框。
当我们用showModelessDialog()打开窗口时，不必用window.close()去关闭它，当以非模态方式［IE5］打开时，
打开对话框的窗口仍可以进行其他的操作，即对话框不总是最上面的焦点，当打开它的窗口ＵＲＬ改变时，它自动关闭。而模态［ＩＥ４］方式的对话框始终有焦点（焦点不可移走，直到它关闭）。模态对话框和打开它的窗口相联系，因此我们打开另外的窗口时，他们的链接关系依然保存，并且隐藏在活动窗口的下面。
使用方法如下：
vReturnValue = window.showModalDialog(sURL [, vArguments] [, sFeatures])
vReturnValue = window.showModelessDialog(sURL [, vArguments] [, sFeatures])
参数说明：
sURL
必选参数，类型：字符串。用来指定对话框要显示的文档的URL。
vArguments
可选参数，类型：变体。用来向对话框传递参数。传递的参数类型不限，包括数组等。对话框通过window.dialogArguments来取得传递进来的参数。
sFeatures
可选参数，类型：字符串。用来描述对话框的外观等信息，可以使用以下的一个或几个，用分号“;”隔开。
dialogHeight 对话框高度，不小于１００px，ＩＥ４中dialogHeight 和 dialogWidth
默认的单位是em，而ＩＥ５中是px，为方便其见，在定义modal方式的对话框时，用px做单位。
　　dialogWidth: 对话框宽度。
　　dialogLeft: 距离桌面左的距离。
　　dialogTop: 离桌面上的距离。
　　center: {yes &#124; no &#124; 1 &#124; 0 }：窗口是否居中，默认yes，但仍可以指定高度和宽度。
　　help: {yes &#124; no &#124; 1 &#124; 0 }：是否显示帮助按钮，默认yes。
　　resizable: {yes &#124; no &#124; 1 &#124; 0 } ［ＩＥ５＋］：是否可被改变大小。默认no。
　　status: {yes &#124; no [...]]]></description>
			<content:encoded><![CDATA[<p>在是用ShowModalDialog 弹出子窗体中在<head>标签后，加入<base target="_self" />后,对于子窗体：</p>
<p>1、POSTBACK后不会打开新窗体。<br />
2、使用window.open()关闭窗体避免弹出另外一个同样的窗口。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
附：showModalDialog()、showModelessDialog()方法使用详解</p>
<p>Javascript有许多内建的方法来产生对话框，如：window.alert(), window.confirm(),window.prompt().等。<br />
然而IE提供更多的方法支持对话框。如：</p>
<p>　　showModalDialog() (IE 4+ 支持)<br />
　　showModelessDialog() (IE 5+ 支持)</p>
<p>
window.showModalDialog()方法用来创建一个显示HTML内容的模态对话框，由于是对话框，因此它并没有一般用window.open()打开的窗口的所有属性。<br />
window.showModelessDialog()方法用来创建一个显示HTML内容的非模态对话框。</p>
<p>当我们用showModelessDialog()打开窗口时，不必用window.close()去关闭它，当以非模态方式［IE5］打开时，<br />
打开对话框的窗口仍可以进行其他的操作，即对话框不总是最上面的焦点，当打开它的窗口ＵＲＬ改变时，它自动关闭。而模态［ＩＥ４］方式的对话框始终有焦点（焦点不可移走，直到它关闭）。模态对话框和打开它的窗口相联系，因此我们打开另外的窗口时，他们的链接关系依然保存，并且隐藏在活动窗口的下面。</p>
<p>使用方法如下：<br />
vReturnValue = window.showModalDialog(sURL [, vArguments] [, sFeatures])<br />
vReturnValue = window.showModelessDialog(sURL [, vArguments] [, sFeatures])<br />
参数说明：<br />
sURL<br />
必选参数，类型：字符串。用来指定对话框要显示的文档的URL。<br />
vArguments<br />
可选参数，类型：变体。用来向对话框传递参数。传递的参数类型不限，包括数组等。对话框通过window.dialogArguments来取得传递进来的参数。<br />
sFeatures<br />
可选参数，类型：字符串。用来描述对话框的外观等信息，可以使用以下的一个或几个，用分号“;”隔开。<br />
dialogHeight 对话框高度，不小于１００px，ＩＥ４中dialogHeight 和 dialogWidth<br />
默认的单位是em，而ＩＥ５中是px，为方便其见，在定义modal方式的对话框时，用px做单位。<br />
　　dialogWidth: 对话框宽度。<br />
　　dialogLeft: 距离桌面左的距离。<br />
　　dialogTop: 离桌面上的距离。<br />
　　center: {yes | no | 1 | 0 }：窗口是否居中，默认yes，但仍可以指定高度和宽度。<br />
　　help: {yes | no | 1 | 0 }：是否显示帮助按钮，默认yes。<br />
　　resizable: {yes | no | 1 | 0 } ［ＩＥ５＋］：是否可被改变大小。默认no。<br />
　　status: {yes | no | 1 | 0 } ［IE5+］：是否显示状态栏。默认为yes[ Modeless]或no[Modal]。<br />
scroll:{ yes | no | 1 | 0 | on | off }：指明对话框是否显示滚动条。默认为yes。</p>
<p>还有几个属性是用在HTA中的，在一般的网页中一般不使用。<br />
dialogHide:{ yes | no | 1 | 0 | on | off }：在打印或者打印预览时对话框是否隐藏。默认为no。<br />
edge:{ sunken | raised }：指明对话框的边框样式。默认为raised。<br />
unadorned:{ yes | no | 1 | 0 | on | off }：默认为no。</p>
<p>传入参数：<br />
要想对话框传递参数，是通过vArguments来进行传递的。类型不限制，对于字符串类型，最大为4096个字符。也可以传递对象，例如：</p>
<p>test1.htm<br />
====================<br />
&lt;script&gt;<br />
var mxh1 = new Array(&quot;test1&quot;,&quot;test2&quot;,&quot;test3&quot;)<br />
var mxh2 = window.open(&quot;about:blank&quot;,&quot;window_mxh&quot;)<br />
// 向对话框传递数组<br />
window.showModalDialog(&quot;test2.htm&quot;,mxh1)<br />
// 向对话框传递window对象<br />
window.showModalDialog(&quot;test3.htm&quot;,mxh2)<br />
&lt;/script&gt;</p>
<p>test2.htm<br />
====================<br />
&lt;script&gt;<br />
var a = window.dialogArguments<br />
alert(&quot;您传递的参数为：&quot; + a)<br />
&lt;/script&gt;</p>
<p>test3.htm<br />
====================<br />
&lt;script&gt;<br />
var a = window.dialogArguments<br />
alert(&quot;您传递的参数为window对象，名称：&quot; + a.name)<br />
&lt;/script&gt;</p>
<p>可以通过window.returnValue向打开对话框的窗口返回信息，当然也可以是对象。例如：</p>
<p>test4.htm<br />
===================<br />
&lt;script&gt;<br />
var a = window.showModalDialog(&quot;test5.htm&quot;)<br />
for(i=0;i&lt;a.length;i++) alert(a[i])<br />
&lt;/script&gt;</p>
<p>test5.htm<br />
===================<br />
&lt;script&gt;<br />
function sendTo()<br />
{<br />
var a=new Array(&quot;a&quot;,&quot;b&quot;)<br />
window.returnValue = a<br />
window.close()<br />
}<br />
&lt;/script&gt;<br />
&lt;body&gt;<br />
&lt;form&gt;<br />
&lt;input value=&quot;返回&quot; type=button onclick=&quot;sendTo()&quot;&gt;<br />
&lt;/form&gt;</p>
<p>常见问题：<br />
1，如何在模态对话框中进行提交而不新开窗口？<br />
如果你 的<br />
浏览器是IE5.5+,可以在对话框中使用带name属性的iframe，提交时可以制定target为该iframe的name。对于IE4+，你可以用高度为0的frame来作：例子，</p>
<p>test6.htm<br />
===================<br />
&lt;script&gt;<br />
window.showModalDialog(&quot;test7.htm&quot;)<br />
&lt;/script&gt;</p>
<p>test7.htm<br />
===================<br />
if(window.location.search) alert(window.location.search)<br />
&lt;frameset rows=&quot;0,*&quot;&gt;<br />
&lt;frame src=&quot;about:blank&quot;&gt;<br />
&lt;frame src=&quot;test8.htm&quot;&gt;<br />
&lt;/frameset&gt;</p>
<p>test8.htm<br />
===================<br />
&lt;form target=&quot;_self&quot; method=&quot;get&quot;&gt;<br />
&lt;input name=txt value=&quot;test&quot;&gt;<br />
&lt;input type=submit&gt;<br />
&lt;/form&gt;<br />
&lt;script&gt;<br />
if(window.location.search) alert(window.location.search)<br />
&lt;/script&gt;<br />
2,可以通过http://servername/virtualdirname/test.htm?name=mxh方式直接向对话框传递参数吗？<br />
答案是不能。但在frame里是可以的。<br />
　</p>
<p>本文地址：<a href="http://www.watch-life.net/life-thinking/html-base-showmodaldialog-notes.html">http://www.watch-life.net/life-thinking/html-base-showmodaldialog-notes.html</a></p>
<p class="akst_link">
</p>
	<h4>你可能也会喜欢以下文章：</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.watch-life.net/programming-notes/2-domainname-realization.html" title="关于二级域名(泛二级域名)的实现 (2007-06-28)">关于二级域名(泛二级域名)的实现</a> (0)</li>
	<li><a href="http://www.watch-life.net/aspnet/gridview-checkbox-firefox.html" title="让GridView中CheckBox列支持FireFox (2008-07-08)">让GridView中CheckBox列支持FireFox</a> (0)</li>
	<li><a href="http://www.watch-life.net/aspnet/refresh-no-resubmit.html" title="防止刷新重复提交数据解决方法的分析 (2008-07-12)">防止刷新重复提交数据解决方法的分析</a> (4)</li>
	<li><a href="http://www.watch-life.net/visual-studio/how-to-create-an-asp-net-web-user-control-and-include-it-in-your-web-page.html" title="web developer tips (8):创建web用户控件并包含在web页面里 (2009-06-17)">web developer tips (8):创建web用户控件并包含在web页面里</a> (1)</li>
	<li><a href="http://www.watch-life.net/aspnet/control-menu-no-postback.html" title="如何不使用让menu控件不回发（postback） (2007-11-08)">如何不使用让menu控件不回发（postback）</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/ajax-extender-controls-ui-behaves-differently-in-vs-2008-than-in-vs-2005.html" title="web developer tips (30):在vs2008中Ajax Extender 控件UI与vs2005中差异 (2009-07-27)">web developer tips (30):在vs2008中Ajax Extender 控件UI与vs2005中差异</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/create-an-iis-virtual-directory-from-within-visual-web-developer.html" title="web developer tips (12):在Visual Web Developer里创建IIS虚拟目录 (2009-06-26)">web developer tips (12):在Visual Web Developer里创建IIS虚拟目录</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/improve-performance-of-page-and-server-control-processing.html" title="web developer tips (22):提高页面和服务器控件加载速度 (2009-07-15)">web developer tips (22):提高页面和服务器控件加载速度</a> (0)</li>
</ul>

转载请注明作者，出处，以及原始超链接。<br />评论数：0 | <b><a href='http://www.watch-life.net/aspnet/html-base-showmodaldialog-notes.html#comment'>评论这篇文章</a></b>|关注作者最近动态,欢迎 follow me <a href='https://twitter.com/xjb' target='_blank'>xjb@twitter.com</a>|联络作者：iamxjb@gmail.com<br/>© 2010 守望轩 <a href='http://www.watch-life.net/aspnet/html-base-showmodaldialog-notes.html'>www.watch-life.net</a>]]></content:encoded>
			<wfw:commentRss>http://www.watch-life.net/aspnet/html-base-showmodaldialog-notes.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在gridview和datagrid里设置列宽</title>
		<link>http://www.watch-life.net/aspnet/gridview-datagrid-column-width.html</link>
		<comments>http://www.watch-life.net/aspnet/gridview-datagrid-column-width.html#comments</comments>
		<pubDate>Wed, 16 Jan 2008 01:51:21 +0000</pubDate>
		<dc:creator>xjb</dc:creator>
				<category><![CDATA[Asp.net]]></category>
		<category><![CDATA[datagrid]]></category>
		<category><![CDATA[gridview]]></category>
		<category><![CDATA[列宽]]></category>

		<guid isPermaLink="false">http://www.watch-life.net/aspnet/gridview-datagrid-column-width.html</guid>
		<description><![CDATA[无论是gridview还是datagrid,在绑定数据后，列宽都不是固定的，在设计时是没法设定的，只能通过绑定是触发的事件来重新设定。参考http://msdn2.microsoft.com/zh-cn/library/ms178296(VS.80).aspx 的解释.
gridview的代码：


protected int widestData;
protected void GridView1_RowDataBound(object sender,
    GridViewRowEventArgs e)
{
    System.Data.DataRowView drv;
    drv = (System.Data.DataRowView)e.Row.DataItem;
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
      if (drv != null)
      {
       [...]]]></description>
			<content:encoded><![CDATA[<p>无论是gridview还是datagrid,在绑定数据后，列宽都不是固定的，在设计时是没法设定的，只能通过绑定是触发的事件来重新设定。参考<a href="http://msdn2.microsoft.com/zh-cn/library/ms178296(VS.80).aspx">http://msdn2.microsoft.com/zh-cn/library/ms178296(VS.80).aspx</a> 的解释.</p>
<p>gridview的代码：</p>
<div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:2cae1867-5711-4bde-99b8-884a9ce4d34d" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre style="background-color:White;">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

--><span style="color: #0000FF; ">protected</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> widestData;
</span><span style="color: #0000FF; ">protected</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> GridView1_RowDataBound(</span><span style="color: #0000FF; ">object</span><span style="color: #000000; "> sender,
    GridViewRowEventArgs e)
{
    System.Data.DataRowView drv;
    drv </span><span style="color: #000000; ">=</span><span style="color: #000000; "> (System.Data.DataRowView)e.Row.DataItem;
    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (e.Row.RowType </span><span style="color: #000000; ">==</span><span style="color: #000000; "> DataControlRowType.DataRow)
    {
      </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (drv </span><span style="color: #000000; ">!=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">)
      {
        String catName </span><span style="color: #000000; ">=</span><span style="color: #000000; "> drv[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].ToString();
        Response.Write(catName </span><span style="color: #000000; ">+</span><span style="color: #000000; "> </span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">);
        </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> catNameLen </span><span style="color: #000000; ">=</span><span style="color: #000000; "> catName.Length;
        </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (catNameLen </span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "> widestData)
        {
          widestData </span><span style="color: #000000; ">=</span><span style="color: #000000; "> catNameLen;
          GridView1.Columns[</span><span style="color: #000000; ">2</span><span style="color: #000000; ">].ItemStyle.Width </span><span style="color: #000000; ">=</span><span style="color: #000000; ">
            widestData </span><span style="color: #000000; ">*</span><span style="color: #000000; "> </span><span style="color: #000000; ">30</span><span style="color: #000000; ">;
          GridView1.Columns[</span><span style="color: #000000; ">2</span><span style="color: #000000; ">].ItemStyle.Wrap </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">;
        }
      }
    }
}

</span><span style="color: #0000FF; ">protected</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> Page_Load(</span><span style="color: #0000FF; ">object</span><span style="color: #000000; "> sender, EventArgs e)
{
    widestData </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;
}

</span></div>
</pre>
</div>
<p>
  <br />datagrid 的代码：</p>
<div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:546d4620-2b82-404c-b4f6-bb42b272cf25" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre style="background-color:White;">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

--><span style="color: #0000FF; ">protected</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> datagrid_ItemCreated(</span><span style="color: #0000FF; ">object</span><span style="color: #000000; "> sender, DataGridItemEventArgs e)
        {
            ListItemType itemType </span><span style="color: #000000; ">=</span><span style="color: #000000; "> e.Item.ItemType;
            </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (itemType </span><span style="color: #000000; ">==</span><span style="color: #000000; "> ListItemType.Header)
            {
                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> i </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">; i </span><span style="color: #000000; ">&lt;</span><span style="color: #000000; "> e.Item.Cells.Count; i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)
                {
                    e.Item.Cells[i].Width </span><span style="color: #000000; ">=</span><span style="color: #000000; "> Unit.Pixel(</span><span style="color: #000000; ">80</span><span style="color: #000000; ">);
                    e.Item.Cells[i].Wrap </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">;
                }
            }
        }
</span></div>
</pre>
</div>
<p>本文地址：<a href="http://www.watch-life.net/aspnet/gridview-datagrid-column-width.html">http://www.watch-life.net/aspnet/gridview-datagrid-column-width.html</a></p>
<p class="akst_link">
</p>
	<h4>你可能也会喜欢以下文章：</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.watch-life.net/aspnet/refresh-no-resubmit.html" title="防止刷新重复提交数据解决方法的分析 (2008-07-12)">防止刷新重复提交数据解决方法的分析</a> (4)</li>
	<li><a href="http://www.watch-life.net/visual-studio/create-an-iis-virtual-directory-from-within-visual-web-developer.html" title="web developer tips (12):在Visual Web Developer里创建IIS虚拟目录 (2009-06-26)">web developer tips (12):在Visual Web Developer里创建IIS虚拟目录</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/have-c-and-vb-net-files-inside-your-app-code-directory.html" title="web developer tips (26):在 App_Code目录下同时放c#和VB.NET文件 (2009-07-19)">web developer tips (26):在 App_Code目录下同时放c#和VB.NET文件</a> (0)</li>
	<li><a href="http://www.watch-life.net/aspnet/aspnet-textbox-readonly.html" title="比较郁闷的textbox（asp.net 2.0）控件 (2007-11-07)">比较郁闷的textbox（asp.net 2.0）控件</a> (0)</li>
	<li><a href="http://www.watch-life.net/aspnet/gridview-checkbox-firefox.html" title="让GridView中CheckBox列支持FireFox (2008-07-08)">让GridView中CheckBox列支持FireFox</a> (0)</li>
	<li><a href="http://www.watch-life.net/aspnet/control-menu-no-postback.html" title="如何不使用让menu控件不回发（postback） (2007-11-08)">如何不使用让menu控件不回发（postback）</a> (0)</li>
	<li><a href="http://www.watch-life.net/aspnet/webresponse-cross-site-visit.html" title="WebResponse 跨域访问 (2008-07-07)">WebResponse 跨域访问</a> (1)</li>
	<li><a href="http://www.watch-life.net/visual-studio/convert-a-gridview-column-from-boundfield-to-templatefield.html" title="web developer tips (64): 在GridView中转换BoundField为TemplateField (2009-11-18)">web developer tips (64): 在GridView中转换BoundField为TemplateField</a> (0)</li>
</ul>

转载请注明作者，出处，以及原始超链接。<br />评论数：2 | <b><a href='http://www.watch-life.net/aspnet/gridview-datagrid-column-width.html#comment'>评论这篇文章</a></b>|关注作者最近动态,欢迎 follow me <a href='https://twitter.com/xjb' target='_blank'>xjb@twitter.com</a>|联络作者：iamxjb@gmail.com<br/>© 2010 守望轩 <a href='http://www.watch-life.net/aspnet/gridview-datagrid-column-width.html'>www.watch-life.net</a>]]></content:encoded>
			<wfw:commentRss>http://www.watch-life.net/aspnet/gridview-datagrid-column-width.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>在GRIDVIEW中合并单元格</title>
		<link>http://www.watch-life.net/aspnet/gridview-merger-cell.html</link>
		<comments>http://www.watch-life.net/aspnet/gridview-merger-cell.html#comments</comments>
		<pubDate>Tue, 18 Dec 2007 04:02:59 +0000</pubDate>
		<dc:creator>xjb</dc:creator>
				<category><![CDATA[Asp.net]]></category>
		<category><![CDATA[asp.net2.0]]></category>
		<category><![CDATA[gridview]]></category>
		<category><![CDATA[单元格]]></category>
		<category><![CDATA[合并]]></category>

		<guid isPermaLink="false">http://www.watch-life.net/aspnet/gridview-merger-cell.html</guid>
		<description><![CDATA[///   &#60;summary&#62;  
    ///   合并GridView列中相同的行  
    ///   &#60;/summary&#62;  
    ///   &#60;param   name=&#8221;GridView1&#8243;&#62;GridView对象&#60;/param&#62;  
    ///   &#60;param   name=&#8221;cellNum&#8221;&#62;需要合并的列&#60;/param&#62;  
    public static void GroupRows(GridView GridView1, int cellNum)
    {
        int i = 0, rowSpanNum = 1;
        while (i &#60; GridView1.Rows.Count &#8211; 1)
        {
            GridViewRow gvr = GridView1.Rows[i];
            for (++i; i &#60; GridView1.Rows.Count; i++)
            {
                GridViewRow gvrNext = GridView1.Rows[i];
                if (gvr.Cells[cellNum].Text == gvrNext.Cells[cellNum].Text)
                {
                    gvrNext.Cells[cellNum].Visible [...]]]></description>
			<content:encoded><![CDATA[<p>///   &lt;summary&gt;  <br />
    ///   合并GridView列中相同的行  <br />
    ///   &lt;/summary&gt;  <br />
    ///   &lt;param   name=&#8221;GridView1&#8243;&gt;GridView对象&lt;/param&gt;  <br />
    ///   &lt;param   name=&#8221;cellNum&#8221;&gt;需要合并的列&lt;/param&gt;  <br />
    public static void GroupRows(GridView GridView1, int cellNum)<br />
    {<br />
        int i = 0, rowSpanNum = 1;<br />
        while (i &lt; GridView1.Rows.Count &#8211; 1)<br />
        {<br />
            GridViewRow gvr = GridView1.Rows[i];<br />
            for (++i; i &lt; GridView1.Rows.Count; i++)<br />
            {<br />
                GridViewRow gvrNext = GridView1.Rows[i];<br />
                if (gvr.Cells[cellNum].Text == gvrNext.Cells[cellNum].Text)<br />
                {<br />
                    gvrNext.Cells[cellNum].Visible = false;<br />
                    rowSpanNum++;<br />
                }<br />
                else<br />
                {<br />
                    gvr.Cells[cellNum].RowSpan = rowSpanNum;<br />
                    rowSpanNum = 1;<br />
                    break;<br />
                }                if (i == GridView1.Rows.Count &#8211; 1)<br />
                {<br />
                    gvr.Cells[cellNum].RowSpan = rowSpanNum;<br />
                }<br />
            }<br />
        }<br />
    }</p>
<p>    ///   &lt;summary&gt;  <br />
    ///   根据条件列合并GridView列中相同的行  <br />
    ///   &lt;/summary&gt;  <br />
    ///   &lt;param   name=&#8221;GridView1&#8243;&gt;GridView对象&lt;/param&gt;  <br />
    ///   &lt;param   name=&#8221;cellNum&#8221;&gt;需要合并的列&lt;/param&gt;<br />
    ///   ///   &lt;param   name=&#8221;cellNum2&#8243;&gt;条件列(根据某条件列还合并)&lt;/param&gt;<br />
    public static void GroupRows(GridView GridView1, int cellNum, int cellNum2)<br />
    {<br />
        int i = 0, rowSpanNum = 1;<br />
        while (i &lt; GridView1.Rows.Count &#8211; 1)<br />
        {<br />
            GridViewRow gvr = GridView1.Rows[i];<br />
            for (++i; i &lt; GridView1.Rows.Count; i++)<br />
            {<br />
                GridViewRow gvrNext = GridView1.Rows[i];<br />
                if (gvr.Cells[cellNum].Text + gvr.Cells[cellNum2].Text == gvrNext.Cells[cellNum].Text + gvrNext.Cells[cellNum2].Text)<br />
                {<br />
                    gvrNext.Cells[cellNum].Visible = false;<br />
                    rowSpanNum++;<br />
                }<br />
                else<br />
                {<br />
                    gvr.Cells[cellNum].RowSpan = rowSpanNum;<br />
                    rowSpanNum = 1;<br />
                    break;<br />
                }</p>
<p>                if (i == GridView1.Rows.Count &#8211; 1)<br />
                {<br />
                    gvr.Cells[cellNum].RowSpan = rowSpanNum;<br />
                }<br />
            }<br />
        }<br />
    }</p>
<p>第二个方法只是在第一个方法的修改了一点点, 在判断单元格的时候，加上了一个条件列：</p>
<p>if (gvr.Cells[cellNum].Text + gvr.Cells[cellNum2].Text == gvrNext.Cells[cellNum].Text + gvrNext.Cells[cellNum2].Text)。当然，第二个方法还可以扩展，根据多个列的条件来合并。<br />
本文地址：<a href="http://www.watch-life.net/aspnet/gridview-merger-cell.html">http://www.watch-life.net/aspnet/gridview-merger-cell.html</a></p>
<p class="akst_link">
</p>
	<h4>你可能也会喜欢以下文章：</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.watch-life.net/visual-studio/change-start-up-options-and-instances-of-asp-net-development-server-in-a-multi-project-solution.html" title="web developer tips (55):多项目解决方案中设置启动项 (2009-10-28)">web developer tips (55):多项目解决方案中设置启动项</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/ajax-extender-controls-ui-behaves-differently-in-vs-2008-than-in-vs-2005.html" title="web developer tips (30):在vs2008中Ajax Extender 控件UI与vs2005中差异 (2009-07-27)">web developer tips (30):在vs2008中Ajax Extender 控件UI与vs2005中差异</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/get-the-browser-agent-using-asp-net-ajax.html" title="web developer tips (13):用ASP.NET Ajax获取浏览器的agent (2009-06-28)">web developer tips (13):用ASP.NET Ajax获取浏览器的agent</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/absolute-position-controls-on-copy-paste-or-drag-drop-from-toolbox.html" title="web developer tips (18):从工具箱粘贴或拖拽控件时进行绝对定位 (2009-07-07)">web developer tips (18):从工具箱粘贴或拖拽控件时进行绝对定位</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/manage-web-site-configuration-through-a-web-interface.html" title="web developer tips (57):通过web界面管理web站点配置 (2009-10-30)">web developer tips (57):通过web界面管理web站点配置</a> (1)</li>
	<li><a href="http://www.watch-life.net/aspnet/refresh-no-resubmit.html" title="防止刷新重复提交数据解决方法的分析 (2008-07-12)">防止刷新重复提交数据解决方法的分析</a> (4)</li>
	<li><a href="http://www.watch-life.net/aspnet/gridview-checkbox-firefox.html" title="让GridView中CheckBox列支持FireFox (2008-07-08)">让GridView中CheckBox列支持FireFox</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/microsoft-web-platform.html" title="web developer tips (27):Microsoft Web Platform (2009-07-20)">web developer tips (27):Microsoft Web Platform</a> (0)</li>
</ul>

转载请注明作者，出处，以及原始超链接。<br />评论数：0 | <b><a href='http://www.watch-life.net/aspnet/gridview-merger-cell.html#comment'>评论这篇文章</a></b>|关注作者最近动态,欢迎 follow me <a href='https://twitter.com/xjb' target='_blank'>xjb@twitter.com</a>|联络作者：iamxjb@gmail.com<br/>© 2010 守望轩 <a href='http://www.watch-life.net/aspnet/gridview-merger-cell.html'>www.watch-life.net</a>]]></content:encoded>
			<wfw:commentRss>http://www.watch-life.net/aspnet/gridview-merger-cell.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>创建控件时出错/lm/w3svc/&#8230; 不是一个有效的iis应用程序&#8221; 的解决办法</title>
		<link>http://www.watch-life.net/aspnet/iis-contorl-err.html</link>
		<comments>http://www.watch-life.net/aspnet/iis-contorl-err.html#comments</comments>
		<pubDate>Thu, 13 Dec 2007 03:32:55 +0000</pubDate>
		<dc:creator>xjb</dc:creator>
				<category><![CDATA[Asp.net]]></category>
		<category><![CDATA[iis]]></category>
		<category><![CDATA[vs2005]]></category>
		<category><![CDATA[出错]]></category>
		<category><![CDATA[应用程序]]></category>
		<category><![CDATA[控件]]></category>

		<guid isPermaLink="false">http://www.watch-life.net/aspnet/iis-contor-err.html</guid>
		<description><![CDATA[创建控件时出错/lm/w3svc/&#8230; 不是一个有效的iis应用程序&#8221; 的解决办法

环境：vs2005，asp.net web 应用程序（项目），IIS作为发布服务器
导致原因：是项目的属性配置中，“服务器”的设置中与IIS中的虚拟目录不一致导致。

解决办法：按项目属性的中的“服务器”设置，重新设置IIS的中虚拟目录.具体的做法如下：
在iis去掉有关的虚拟目录，然后在项目属性的中的“服务器”设置，“创建虚拟目录”即可。
本文地址:http://www.watch-life.net/aspnet/iis-contorl-err.html


	你可能也会喜欢以下文章：
	
	web developer tips (61):如何创建Asp.net Dynamic Data网站 (0)
	web developer tips (20):使用IIS作为web服务器 (0)
	Windows mobile 下读取手机SIM卡信息 (3)
	windows moblie 5.0在托管程序中实现短信接收和拦截 (1)
	web developer tips (72): 在Windows 7中使用IIS远程管理器 (0)
	防止刷新重复提交数据解决方法的分析 (4)
	web developer tips (12):在Visual Web Developer里创建IIS虚拟目录 (0)
	web developer tips (57):通过web界面管理web站点配置 (1)


转载请注明作者，出处，以及原始超链接。评论数：0 &#124; 评论这篇文章&#124;关注作者最近动态,欢迎 follow me xjb@twitter.com&#124;联络作者：iamxjb@gmail.com© 2010 守望轩 www.watch-life.net]]></description>
			<content:encoded><![CDATA[<p>创建控件时出错/lm/w3svc/&#8230; 不是一个有效的iis应用程序&#8221; 的解决办法</p>
<p id="msgcns!A7211D4BA1EAF570!247" class="bvMsg"><a href="http://by1.storage.msn.com/y1pzWrk_HKXQHSMcFD4Baaq4yuZQlUsfG6C5Rxoi6Maxy-TPAaSvQL32PMml8Yz42CJYcpU4x6f9uz_h5b2PpouHr7PRuBPVfRS?PARTNER=WRITER"><img border="0" width="412" src="http://by1.storage.msn.com/y1pzWrk_HKXQHTzRTut8q_tyXl03U2bu0F0QSEnHJehs-MFkrHPN7Wst3QpUvyWm1zVoaS98De9aqOrW9eB1f3sgYpXIIHE0lf-?PARTNER=WRITER" alt="err" height="55" style="border-width: 0px" /></a></p>
<p>环境：vs2005，asp.net web 应用程序（项目），IIS作为发布服务器</p>
<p>导致原因：是项目的属性配置中，“服务器”的设置中与IIS中的虚拟目录不一致导致。</p>
<p><a href="http://zyj20g.bay.livefilestore.com/y1pjtqHegieE-qnyDVGyGPtbpc-2vbHQI3YlJdHdwe4XKToWG4cyo8_XQ3awwWJ3ohiZCqB2k5S-YT-U1Y55uDRnphHlzuvjwxZ?PARTNER=WRITER"><img border="0" width="441" src="http://by1.storage.msn.com/y1pzWrk_HKXQHTzLv2J9Thcf86sqQvDfXkugh_pjDKC2s1SnLxLyzR0hqNzYsUZe3VrymnUsT0Nqwx-vMur0vJZzk9i1qYVRdmc?PARTNER=WRITER" alt="err2" height="148" style="border-width: 0px" /></a></p>
<p>解决办法：按项目属性的中的“服务器”设置，重新设置IIS的中虚拟目录.具体的做法如下：<br />
在iis去掉有关的虚拟目录，然后在项目属性的中的“服务器”设置，“创建虚拟目录”即可。</p>
<p>本文地址:<a href="http://www.watch-life.net/aspnet/iis-contor-err.html">http://www.watch-life.net/aspnet/iis-contorl-err.html</a></p>
<p class="akst_link">
</p>
	<h4>你可能也会喜欢以下文章：</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.watch-life.net/visual-studio/create-an-asp-net-dynamic-data-web-site.html" title="web developer tips (61):如何创建Asp.net Dynamic Data网站 (2009-11-09)">web developer tips (61):如何创建Asp.net Dynamic Data网站</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/change-wap-to-use-an-iis-web-server.html" title="web developer tips (20):使用IIS作为web服务器 (2009-07-12)">web developer tips (20):使用IIS作为web服务器</a> (0)</li>
	<li><a href="http://www.watch-life.net/windows-mobile/windows-mobile-sim.html" title="Windows mobile 下读取手机SIM卡信息 (2007-02-07)">Windows mobile 下读取手机SIM卡信息</a> (3)</li>
	<li><a href="http://www.watch-life.net/windows-mobile/windows-mobile-sms-received-mapirule.html" title="windows moblie 5.0在托管程序中实现短信接收和拦截 (2008-01-12)">windows moblie 5.0在托管程序中实现短信接收和拦截</a> (1)</li>
	<li><a href="http://www.watch-life.net/visual-studio/iis-remote-management-for-windows-7.html" title="web developer tips (72): 在Windows 7中使用IIS远程管理器 (2010-01-11)">web developer tips (72): 在Windows 7中使用IIS远程管理器</a> (0)</li>
	<li><a href="http://www.watch-life.net/aspnet/refresh-no-resubmit.html" title="防止刷新重复提交数据解决方法的分析 (2008-07-12)">防止刷新重复提交数据解决方法的分析</a> (4)</li>
	<li><a href="http://www.watch-life.net/visual-studio/create-an-iis-virtual-directory-from-within-visual-web-developer.html" title="web developer tips (12):在Visual Web Developer里创建IIS虚拟目录 (2009-06-26)">web developer tips (12):在Visual Web Developer里创建IIS虚拟目录</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/manage-web-site-configuration-through-a-web-interface.html" title="web developer tips (57):通过web界面管理web站点配置 (2009-10-30)">web developer tips (57):通过web界面管理web站点配置</a> (1)</li>
</ul>

转载请注明作者，出处，以及原始超链接。<br />评论数：0 | <b><a href='http://www.watch-life.net/aspnet/iis-contorl-err.html#comment'>评论这篇文章</a></b>|关注作者最近动态,欢迎 follow me <a href='https://twitter.com/xjb' target='_blank'>xjb@twitter.com</a>|联络作者：iamxjb@gmail.com<br/>© 2010 守望轩 <a href='http://www.watch-life.net/aspnet/iis-contorl-err.html'>www.watch-life.net</a>]]></content:encoded>
			<wfw:commentRss>http://www.watch-life.net/aspnet/iis-contorl-err.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>遍历页面上的所有控件</title>
		<link>http://www.watch-life.net/aspnet/ergodic-children-controls.html</link>
		<comments>http://www.watch-life.net/aspnet/ergodic-children-controls.html#comments</comments>
		<pubDate>Tue, 20 Nov 2007 03:29:07 +0000</pubDate>
		<dc:creator>xjb</dc:creator>
				<category><![CDATA[Asp.net]]></category>
		<category><![CDATA[asp.net2.0]]></category>
		<category><![CDATA[控件]]></category>
		<category><![CDATA[遍历]]></category>

		<guid isPermaLink="false">http://www.watch-life.net/aspnet/ergodic-children-controls.html</guid>
		<description><![CDATA[/// &#60;summary&#62;
        /// 采用递归的方法来遍历页面控件
        /// &#60;/summary&#62;
        /// &#60;param name=&#8221;parent&#8221;&#62;&#60;/param&#62;
        protected void ErgodicChildrenControls(Control parent)
        {
           
            foreach (Control c in parent.Controls)
            {                //此处写有关控件的代码，例如    
              //if (c is HtmlInputButton)
               // {
               //    HtmlInputButton btn = (HtmlInputButton)c;
               //   if (c.id ==&#8221;save&#8221;)
              // {
              //      c.Visble=true;
              //     }
               // }
                 if (c.Controls.Count &#62; 0)       // 判断该控件是否有下属控件。
                {
                    ErgodicChildrenControls(c);    //递归，访问该控件的下属控件集。
                }
            }
        [...]]]></description>
			<content:encoded><![CDATA[<p>/// &lt;summary&gt;<br />
        /// 采用递归的方法来遍历页面控件<br />
        /// &lt;/summary&gt;<br />
        /// &lt;param name=&#8221;parent&#8221;&gt;&lt;/param&gt;<br />
        protected void ErgodicChildrenControls(Control parent)<br />
        {<br />
           <br />
            foreach (Control c in parent.Controls)<br />
            {                //此处写有关控件的代码，例如    </p>
<p>              //if (c is HtmlInputButton)<br />
               // {</p>
<p>               //    HtmlInputButton btn = (HtmlInputButton)c;</p>
<p>               //   if (c.id ==&#8221;save&#8221;)</p>
<p>              // {<br />
              //      c.Visble=true;</p>
<p>              //     }<br />
               // }<br />
                 if (c.Controls.Count &gt; 0)       // 判断该控件是否有下属控件。<br />
                {<br />
                    ErgodicChildrenControls(c);    //递归，访问该控件的下属控件集。<br />
                }<br />
            }<br />
        }</p>
<p>调用的方法：</p>
<p>protected void Page_Load(object sender, EventArgs e)<br />
   {  </p>
<p>              ErgodicChildrenControls(this);<br />
   }</p>
<p>注意：该方法只能遍历服务器（即 runat=server）控件</p>
<p>本文地址：<a href="http://www.watch-life.net/aspnet/ergodic-children-controls.html">http://www.watch-life.net/aspnet/ergodic-children-controls.html</a></p>
<p class="akst_link">
</p>
	<h4>你可能也会喜欢以下文章：</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.watch-life.net/visual-studio/improve-performance-of-page-and-server-control-processing.html" title="web developer tips (22):提高页面和服务器控件加载速度 (2009-07-15)">web developer tips (22):提高页面和服务器控件加载速度</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/use-tracing-with-asp-net-ajax.html" title="web developer tips (15):在ASP.NET Ajax里使用跟踪 (2009-07-02)">web developer tips (15):在ASP.NET Ajax里使用跟踪</a> (0)</li>
	<li><a href="http://www.watch-life.net/programming-notes/read-how-to-be-a-better-developer.html" title="英文阅读：如何成为更好的程序员 (2008-02-17)">英文阅读：如何成为更好的程序员</a> (0)</li>
	<li><a href="http://www.watch-life.net/aspnet/gridview-datagrid-column-width.html" title="在gridview和datagrid里设置列宽 (2008-01-16)">在gridview和datagrid里设置列宽</a> (2)</li>
	<li><a href="http://www.watch-life.net/visual-studio/visual-web-developer-2008-has-a-new-style-builder-dialog.html" title="web developer tips (10):Visual Web Developer 2008中新的样式生成器 (2009-06-23)">web developer tips (10):Visual Web Developer 2008中新的样式生成器</a> (0)</li>
	<li><a href="http://www.watch-life.net/life-thinking/new-year-new-plan.html" title="新年新计划 (2008-02-09)">新年新计划</a> (3)</li>
	<li><a href="http://www.watch-life.net/technology-book-review/programming-csharp-bookreview.html" title="温故知新的经典&#8211;书评《Programming C# 》中文版第4版 (2007-10-30)">温故知新的经典&#8211;书评《Programming C# 》中文版第4版</a> (1)</li>
	<li><a href="http://www.watch-life.net/aspnet/refresh-no-resubmit.html" title="防止刷新重复提交数据解决方法的分析 (2008-07-12)">防止刷新重复提交数据解决方法的分析</a> (4)</li>
</ul>

转载请注明作者，出处，以及原始超链接。<br />评论数：0 | <b><a href='http://www.watch-life.net/aspnet/ergodic-children-controls.html#comment'>评论这篇文章</a></b>|关注作者最近动态,欢迎 follow me <a href='https://twitter.com/xjb' target='_blank'>xjb@twitter.com</a>|联络作者：iamxjb@gmail.com<br/>© 2010 守望轩 <a href='http://www.watch-life.net/aspnet/ergodic-children-controls.html'>www.watch-life.net</a>]]></content:encoded>
			<wfw:commentRss>http://www.watch-life.net/aspnet/ergodic-children-controls.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何不使用让menu控件不回发（postback）</title>
		<link>http://www.watch-life.net/aspnet/control-menu-no-postback.html</link>
		<comments>http://www.watch-life.net/aspnet/control-menu-no-postback.html#comments</comments>
		<pubDate>Thu, 08 Nov 2007 03:25:29 +0000</pubDate>
		<dc:creator>xjb</dc:creator>
				<category><![CDATA[Asp.net]]></category>
		<category><![CDATA[asp.net2.0]]></category>
		<category><![CDATA[menu]]></category>
		<category><![CDATA[回发]]></category>
		<category><![CDATA[控件]]></category>

		<guid isPermaLink="false">http://www.watch-life.net/aspnet/control-menu-no-postback.html</guid>
		<description><![CDATA[写网站首页程序的导航，要用asp.net2.0 的下menu控件，因为绑定数据库十分方便，不过有个问题，就是我采用的iframe来跳转页面，不想整个首页都跳转，不过发现menu控件没有控制回发的属性，每单击就回发一次，挺麻烦的。后来想到一个曲折来实现的办法，在text属性上做文章，代码如下：
index.aspx页面：
&#8230;..
&#60;script language=javascript&#62;
function OpenNewWindow(strUrl)
{ 
    
    document.all.UrlRedirect.src = strUrl;
  
}
&#60;/script&#62;
&#60;asp:Menu ID=&#8221;Menuindex&#8221; runat=&#8221;server&#8221; Orientation=&#8221;Horizontal&#8221;   &#62;
     
        &#60;/asp:Menu&#62;
&#8230;.
&#60;iframe id =&#8221;UrlRedirect&#8221; name=&#8221;UrlRedirect&#8221;&#62;&#60;/iframe&#62;
&#8230;..
index.aspx.cs
&#8230;&#8230;
protected void Page_Load(object sender, EventArgs e)
    {        
      
        InitNavigationTree(Menuindex.Items, &#8220;0&#8243;);        
     
    }
    private void InitNavigationTree(MenuItemCollection menuItemCollection, string sParentID)
    {
        
        DataView dvw = new DataView();
        MenuItem nodTemp;   
    
        dvw.Table = getDataAll(&#8220;select  * from F_menu  where F_PARENTMENUGUID=&#8217;&#8221;+sParentID +&#8221;&#8216; order by F_ORDER&#8221;);
        foreach (DataRowView drv in dvw)
        {
            nodTemp [...]]]></description>
			<content:encoded><![CDATA[<p>写网站首页程序的导航，要用asp.net2.0 的下menu控件，因为绑定数据库十分方便，不过有个问题，就是我采用的iframe来跳转页面，不想整个首页都跳转，不过发现menu控件没有控制回发的属性，每单击就回发一次，挺麻烦的。后来想到一个曲折来实现的办法，在text属性上做文章，代码如下：<br />
index.aspx页面：</p>
<p>&#8230;..</p>
<p>&lt;script language=javascript&gt;</p>
<p>function OpenNewWindow(strUrl)<br />
{ <br />
    <br />
    document.all.UrlRedirect.src = strUrl;<br />
  <br />
}</p>
<p>&lt;/script&gt;</p>
<p>&lt;asp:Menu ID=&#8221;Menuindex&#8221; runat=&#8221;server&#8221; Orientation=&#8221;Horizontal&#8221;   &gt;<br />
     <br />
        &lt;/asp:Menu&gt;</p>
<p>&#8230;.</p>
<p>&lt;iframe id =&#8221;UrlRedirect&#8221; name=&#8221;UrlRedirect&#8221;&gt;&lt;/iframe&gt;<br />
&#8230;..</p>
<p>index.aspx.cs<br />
&#8230;&#8230;</p>
<p>protected void Page_Load(object sender, EventArgs e)<br />
    {        <br />
      <br />
        InitNavigationTree(Menuindex.Items, &#8220;0&#8243;);        <br />
     <br />
    }<br />
    private void InitNavigationTree(MenuItemCollection menuItemCollection, string sParentID)<br />
    {<br />
        </p>
<p>        DataView dvw = new DataView();</p>
<p>        MenuItem nodTemp;   </p>
<p>    <br />
        dvw.Table = getDataAll(&#8220;select  * from F_menu  where F_PARENTMENUGUID=&#8217;&#8221;+sParentID +&#8221;&#8216; order by F_ORDER&#8221;);<br />
        foreach (DataRowView drv in dvw)<br />
        {<br />
            nodTemp = new MenuItem();<br />
            nodTemp.Value = drv["F_MENUGUID"].ToString();<br />
            nodTemp.Text = GetMenuText(drv["F_LINKPAGE"].ToString(),drv["F_MENUNAME"].ToString()) ;<br />
            menuItemCollection.Add(nodTemp);           <br />
            InitNavigationTree(nodTemp.ChildItems, nodTemp.Value);<br />
        }<br />
    }</p>
<p>    private string GetMenuText(string linkTxt,string nameTxt)<br />
    {<br />
        string temp = &#8220;&lt;a style=&#8217;cursor:hand&#8217; onclick=OpenNewWindow(&#8216;&#8221; + linkTxt + &#8220;&#8216;)&gt;&#8221; + nameTxt + &#8220;&lt;/a&gt;&#8221;;<br />
        return temp;<br />
    }<br />
&#8230;&#8230;&#8230;.<br />
这样menu就不回发了，而只会调用菜单文本上的那个onclick事件。<br />
<span style="color: #0000cd">注：getDataAll 方法是获得菜单表数据的方法，在此省略了</span></p>
<p><span style="color: #0000cd"></span></p>
<p><span style="color: #0000cd">本文地址：<a href="http://www.watch-life.net/aspnet/control-menu-no-postback.html">http://www.watch-life.net/aspnet/control-menu-no-postback.html</a></span></p>
<p class="akst_link">
</p>
	<h4>你可能也会喜欢以下文章：</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.watch-life.net/aspnet/gridview-datagrid-column-width.html" title="在gridview和datagrid里设置列宽 (2008-01-16)">在gridview和datagrid里设置列宽</a> (2)</li>
	<li><a href="http://www.watch-life.net/visual-studio/use-tracing-with-asp-net-ajax.html" title="web developer tips (15):在ASP.NET Ajax里使用跟踪 (2009-07-02)">web developer tips (15):在ASP.NET Ajax里使用跟踪</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/enable-debugging-of-your-web-site.html" title="web developer tips (14):启动网站调试 (2009-07-02)">web developer tips (14):启动网站调试</a> (1)</li>
	<li><a href="http://www.watch-life.net/visual-studio/microsoft-web-platform.html" title="web developer tips (27):Microsoft Web Platform (2009-07-20)">web developer tips (27):Microsoft Web Platform</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/manage-web-site-configuration-through-a-web-interface.html" title="web developer tips (57):通过web界面管理web站点配置 (2009-10-30)">web developer tips (57):通过web界面管理web站点配置</a> (1)</li>
	<li><a href="http://www.watch-life.net/visual-studio/get-the-browser-agent-using-asp-net-ajax.html" title="web developer tips (13):用ASP.NET Ajax获取浏览器的agent (2009-06-28)">web developer tips (13):用ASP.NET Ajax获取浏览器的agent</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/the-style-application-toolbar-works-in-both-auto-and-manual-modes.html" title="web developer tips (2):样式应用工具栏的工作模式 (2009-05-24)">web developer tips (2):样式应用工具栏的工作模式</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/visual-web-developer-2008-has-a-new-style-builder-dialog.html" title="web developer tips (10):Visual Web Developer 2008中新的样式生成器 (2009-06-23)">web developer tips (10):Visual Web Developer 2008中新的样式生成器</a> (0)</li>
</ul>

转载请注明作者，出处，以及原始超链接。<br />评论数：0 | <b><a href='http://www.watch-life.net/aspnet/control-menu-no-postback.html#comment'>评论这篇文章</a></b>|关注作者最近动态,欢迎 follow me <a href='https://twitter.com/xjb' target='_blank'>xjb@twitter.com</a>|联络作者：iamxjb@gmail.com<br/>© 2010 守望轩 <a href='http://www.watch-life.net/aspnet/control-menu-no-postback.html'>www.watch-life.net</a>]]></content:encoded>
			<wfw:commentRss>http://www.watch-life.net/aspnet/control-menu-no-postback.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>比较郁闷的textbox（asp.net 2.0）控件</title>
		<link>http://www.watch-life.net/aspnet/aspnet-textbox-readonly.html</link>
		<comments>http://www.watch-life.net/aspnet/aspnet-textbox-readonly.html#comments</comments>
		<pubDate>Wed, 07 Nov 2007 03:20:15 +0000</pubDate>
		<dc:creator>xjb</dc:creator>
				<category><![CDATA[Asp.net]]></category>
		<category><![CDATA[asp.net2.0]]></category>
		<category><![CDATA[readonly]]></category>
		<category><![CDATA[textbox]]></category>
		<category><![CDATA[vs2005]]></category>
		<category><![CDATA[控件]]></category>

		<guid isPermaLink="false">http://www.watch-life.net/aspnet/aspnet-textbox-readonly.html</guid>
		<description><![CDATA[今天转一个asp.net程序从vs2003到vs2005，老报错，postback后取不到textbox控件的改变的值，在vs2003下完全正常，在vs2005下就是不行，搞了一上午都不知为啥，于是上网查查，原来是textbox控件的readonly属性做的怪，真的郁闷.asp.net2.0 的这种改动让人无法理解。解决方法详见如下：
（http://blog.joycode.com/saucer/archive/2006/05/11/75741.aspx）
有时候，我们不希望用户直接编辑TextBox，而是希望通过客户端脚本的方式来设置内容，一般的做法是设置TextBox的属性ReadOnly为true。但在ASP.NET 2.0里有了变化，设置了ReadOnly为true的TextBox，在服务器端不能通过Text属性获取在客户端设置的新内容，在Reflector里比较一下LoadPostData的实现
.NET 1.1中,
bool IPostBackDataHandler.LoadPostData(string postDataKey, NameValueCollection postCollection)
{
      string text1 = this.Text;
      string text2 = postCollection[postDataKey];
      if (!text1.Equals(text2))
      {
            this.Text = text2;
            return true;
      }
      return false;
}
.NET 2.0中,
protected virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection)
{
      base.ValidateEvent(postDataKey);
      string text1 = this.Text;
      string text2 = postCollection[postDataKey];
      if (!this.ReadOnly &#38;&#38; !text1.Equals(text2, StringComparison.Ordinal))
      {
            this.Text = text2;
            return true;
      }
      [...]]]></description>
			<content:encoded><![CDATA[<p>今天转一个asp.net程序从vs2003到vs2005，老报错，postback后取不到textbox控件的改变的值，在vs2003下完全正常，在vs2005下就是不行，搞了一上午都不知为啥，于是上网查查，原来是textbox控件的readonly属性做的怪，真的郁闷.asp.net2.0 的这种改动让人无法理解。解决方法详见如下：</p>
<p>（<a href="http://blog.joycode.com/saucer/archive/2006/05/11/75741.aspx" title="http://blog.joycode.com/saucer/archive/2006/05/11/75741.aspx"><span style="color: #669966">http://blog.joycode.com/saucer/archive/2006/05/11/75741.aspx</span></a>）</p>
<p>有时候，我们不希望用户直接编辑TextBox，而是希望通过客户端脚本的方式来设置内容，一般的做法是设置TextBox的属性ReadOnly为true。但在ASP.NET 2.0里有了变化，设置了ReadOnly为true的TextBox，在服务器端不能通过Text属性获取在客户端设置的新内容，在Reflector里比较一下LoadPostData的实现</p>
<p>.NET 1.1中,</p>
<p>bool IPostBackDataHandler.LoadPostData(string postDataKey, NameValueCollection postCollection)<br />
{<br />
      string text1 = this.Text;<br />
      string text2 = postCollection[postDataKey];<br />
      if (!text1.Equals(text2))<br />
      {<br />
            this.Text = text2;<br />
            return true;<br />
      }<br />
      return false;<br />
}</p>
<p>.NET 2.0中,</p>
<p>protected virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection)<br />
{<br />
      base.ValidateEvent(postDataKey);<br />
      string text1 = this.Text;<br />
      string text2 = postCollection[postDataKey];<br />
      if <strong>(!this.ReadOnly</strong> &amp;&amp; !text1.Equals(text2, StringComparison.Ordinal))<br />
      {<br />
            this.Text = text2;<br />
            return true;<br />
      }<br />
      return false;<br />
}</p>
<p>就可以看出，如果设置了ReadOnly为true，从客户端传回的新的值是不被设置到Text属性的。</p>
<p>想要保持.NET 1.*中的行为，建议的做法是设置客户端属性ContentEditable=false，参考</p>
<p>SYSK 118: ReadOnly or ContentEditable?<br />
<a href="http://blogs.msdn.com/irenak/archive/2006/05/03/589085.aspx"><span style="color: #669966">http://blogs.msdn.com/irenak/archive/2006/05/03/589085.aspx</span></a><br />
<span style="color: #87ceeb">Consider this:  you want a text box on a web page to be not editable by the user,<br />
 but you want to be able to change the text box’s contents in client side script<br />
 and see the updated text on the server.</span><br />
<span style="color: #87ceeb"></span><br />
<span style="color: #87ceeb">Did you know that if you set TextBox1.ReadOnly = true, the value<br />
set by the client side script will not be visible on the server? <br />
  Try it for yourself… Here is the code:</span><br />
<span style="color: #87ceeb"></span><br />
<span style="color: #87ceeb">&lt;form id=&#8221;form1&#8243; runat=&#8221;server&#8221;&gt;</span><br />
<span style="color: #87ceeb">    &lt;div&gt;</span><br />
<span style="color: #87ceeb">        &lt;input id=&#8221;Button2&#8243; type=&#8221;button&#8221;<br />
value=&#8221;Change Text via Client-Side Script&#8221; onclick=&#8221;ChangeText();&#8221; /&gt;</span><br />
<span style="color: #87ceeb">    &lt;/div&gt;</span><br />
<span style="color: #87ceeb">    &lt;asp:TextBox ID=&#8221;TextBox1&#8243; runat=&#8221;server&#8221;&gt;initial text&lt;/asp:TextBox&gt;</span><br />
<span style="color: #87ceeb">    &lt;asp:Button ID=&#8221;Button1&#8243; runat=&#8221;server&#8221;<br />
OnClick=&#8221;Button1_Click&#8221; Text=&#8221;See Value on the Server-Side&#8221; /&gt;</span><br />
<span style="color: #87ceeb">&lt;/form&gt;</span><br />
<span style="color: #87ceeb"></span><br />
<span style="color: #87ceeb">&lt;script language=&#8221;javascript&#8221; type=&#8221;text/javascript&#8221;&gt;</span><br />
<span style="color: #87ceeb">&lt;!&#8211;</span><br />
<span style="color: #87ceeb">function ChangeText()</span><br />
<span style="color: #87ceeb">{    </span><br />
<span style="color: #87ceeb">    form1["TextBox1"].setAttribute(&#8220;innerText&#8221;, &#8220;abc&#8221;);</span><br />
<span style="color: #87ceeb">}    </span><br />
<span style="color: #87ceeb">&#8211;&gt;    </span><br />
<span style="color: #87ceeb">&lt;/script&gt;</span><br />
<span style="color: #87ceeb"></span><br />
<span style="color: #87ceeb"></span><br />
<span style="color: #87ceeb">public partial class MyForm : System.Web.UI.Page</span><br />
<span style="color: #87ceeb">{</span><br />
<span style="color: #87ceeb">    protected void Page_Load(object sender, EventArgs e)</span><br />
<span style="color: #87ceeb">    {            </span><br />
<span style="color: #87ceeb">        TextBox1.ReadOnly = true;</span><br />
<span style="color: #87ceeb">    }</span><br />
<span style="color: #87ceeb"></span><br />
<span style="color: #87ceeb">    protected void Button1_Click(object sender, EventArgs e)</span><br />
<span style="color: #87ceeb">    {</span><br />
<span style="color: #87ceeb">        Response.Write(TextBox1.Text + &#8220;&lt;br&gt;&#8221;);</span><br />
<span style="color: #87ceeb">        </span><br />
<span style="color: #87ceeb">    }</span><br />
<span style="color: #87ceeb">}</span><br />
<span style="color: #87ceeb"></span><br />
<span style="color: #87ceeb">However, if instead of setting TextBox1.ReadOnly property<br />
you set ContentEditable attribute to false, you’ll get the behavior you’re looking for:</span><br />
<span style="color: #87ceeb">TextBox1.Attributes["contentEditable"] = &#8220;false&#8221;;</span><br />
<span style="color: #87ceeb"></span><br />
<span style="color: #87ceeb"></span><br />
<span style="color: #87ceeb">Special thanks to Vinay Kumar Baliyan who replied<br />
 with the information used in this post to Les Cardinal‘s question.<br />
</span></p>
<p>其实如果是设置客户端属性的话，设置客户端的readonly属性应该也是可以的:</p>
<p>TextBox1.Attributes["readonly"] = &#8220;true&#8221;;</p>
<p>本文地址:<a href="http://www.watch-life.net/aspnet/aspnet-textbox-readonly.html">http://www.watch-life.net/aspnet/aspnet-textbox-readonly.html</a></p>
<p class="akst_link">
</p>
	<h4>你可能也会喜欢以下文章：</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.watch-life.net/programming-notes/read-how-to-be-a-better-developer.html" title="英文阅读：如何成为更好的程序员 (2008-02-17)">英文阅读：如何成为更好的程序员</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/change-start-up-options-and-instances-of-asp-net-development-server-in-a-multi-project-solution.html" title="web developer tips (55):多项目解决方案中设置启动项 (2009-10-28)">web developer tips (55):多项目解决方案中设置启动项</a> (0)</li>
	<li><a href="http://www.watch-life.net/life-thinking/new-year-new-plan.html" title="新年新计划 (2008-02-09)">新年新计划</a> (3)</li>
	<li><a href="http://www.watch-life.net/visual-studio/create-an-iis-virtual-directory-from-within-visual-web-developer.html" title="web developer tips (12):在Visual Web Developer里创建IIS虚拟目录 (2009-06-26)">web developer tips (12):在Visual Web Developer里创建IIS虚拟目录</a> (0)</li>
	<li><a href="http://www.watch-life.net/aspnet/html-base-showmodaldialog-notes.html" title="备忘：base 标签和ShowModalDialog 、showModelessDialog (2008-01-24)">备忘：base 标签和ShowModalDialog 、showModelessDialog</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/add-ajax-control-toolkit-to-the-toolbox.html" title="web developer tips (62):在vs工具箱添加AJAX控件工具包 (2009-11-13)">web developer tips (62):在vs工具箱添加AJAX控件工具包</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/change-wap-to-use-an-iis-web-server.html" title="web developer tips (20):使用IIS作为web服务器 (2009-07-12)">web developer tips (20):使用IIS作为web服务器</a> (0)</li>
	<li><a href="http://www.watch-life.net/visual-studio/create-an-asp-net-dynamic-data-web-site.html" title="web developer tips (61):如何创建Asp.net Dynamic Data网站 (2009-11-09)">web developer tips (61):如何创建Asp.net Dynamic Data网站</a> (0)</li>
</ul>

转载请注明作者，出处，以及原始超链接。<br />评论数：0 | <b><a href='http://www.watch-life.net/aspnet/aspnet-textbox-readonly.html#comment'>评论这篇文章</a></b>|关注作者最近动态,欢迎 follow me <a href='https://twitter.com/xjb' target='_blank'>xjb@twitter.com</a>|联络作者：iamxjb@gmail.com<br/>© 2010 守望轩 <a href='http://www.watch-life.net/aspnet/aspnet-textbox-readonly.html'>www.watch-life.net</a>]]></content:encoded>
			<wfw:commentRss>http://www.watch-life.net/aspnet/aspnet-textbox-readonly.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
