<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-ASP.NET 魔法學院</title><link>http://www.cnblogs.com/jeff377/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 27 Aug 2008 23:43:00 GMT</lastBuildDate><pubDate>Wed, 27 Aug 2008 23:43:00 GMT</pubDate><ttl>60</ttl><item><title>字符串中寻找关键词片段</title><link>http://www.cnblogs.com/jeff377/archive/2008/08/27/1277982.html</link><dc:creator>jeff377</dc:creator><author>jeff377</author><pubDate>Wed, 27 Aug 2008 11:22:00 GMT</pubDate><guid>http://www.cnblogs.com/jeff377/archive/2008/08/27/1277982.html</guid><wfw:comment>http://www.cnblogs.com/jeff377/comments/1277982.html</wfw:comment><comments>http://www.cnblogs.com/jeff377/archive/2008/08/27/1277982.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/jeff377/comments/commentRss/1277982.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jeff377/services/trackbacks/1277982.html</trackback:ping><description><![CDATA[<p>利用 RegEx 可以很方便的做字符串处理，若我们需要从一篇文章中撷取出关键词片段(含前后文)，可以利用下列的 FindKeywordParts 函式来处理，搜寻到的关键词片段的字符串集合会以 List(Of String) 型别传回。</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&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;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;由字符串中寻找关键词片段。<br />
&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;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="Text"&gt;</span><span style="color: #008000">字符串。</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="Keyword"&gt;</span><span style="color: #008000">关键词。</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="BLength"&gt;</span><span style="color: #008000">包含关键词前的字符数。</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="ALength"&gt;</span><span style="color: #008000">包含关键词后的字符数。</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;returns&gt;</span><span style="color: #008000">传回符合的关键词片段的字符串集合。</span><span style="color: #808080">&lt;/returns&gt;</span><span style="color: #808080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Shared</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Function</span><span style="color: #000000">&nbsp;FindKeywordParts(&nbsp;_<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;Text&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">,&nbsp;_<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;Keyword&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">,&nbsp;_<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;BLength&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Integer</span><span style="color: #000000">,&nbsp;_<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;ALength&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Integer</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;List(</span><span style="color: #0000ff">Of</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;sPattern&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;oRegEx&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;Regex<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;oMatchs&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;MatchCollection<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;oMatch&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;Match<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;oList&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">New</span><span style="color: #000000">&nbsp;List(</span><span style="color: #0000ff">Of</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">)<br />
<br />
&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;sPattern&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">.Format(</span><span style="color: #800000">"</span><span style="color: #800000">.{{0,{1}}}{0}.{{0,{2}}}</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;Keyword,&nbsp;BLength,&nbsp;ALength)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oRegEx&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">New</span><span style="color: #000000">&nbsp;Regex(sPattern)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oMatchs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;oRegEx.Matches(Text)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">For</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Each</span><span style="color: #000000">&nbsp;oMatch&nbsp;</span><span style="color: #0000ff">In</span><span style="color: #000000">&nbsp;oMatchs<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oList.Add(oMatch.Value)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Next</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Return</span><span style="color: #000000">&nbsp;oList<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Function</span></div>
<p>&nbsp;</p>
<p>假设我们要找一篇文章中，包含「连胡会」这个关键词片段，并包含关键词前后文各10个字符，程序代码如下</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;sText&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">宋胡会可望谈两岸政治定位【吴燕玲╱台北报导】连胡会之后国民党单独召开记者会，以新闻公报的形式发布五大共识，亲民党中央昨天不愿对连胡会发表看法</span><span style="color: #800000">"</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;oList&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;List(</span><span style="color: #0000ff">Of</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oList&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;FindKeywordParts(sText,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">连胡会</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">10</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">10</span><span style="color: #000000">)</span></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/jeff377/aggbug/1277982.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41924/" target="_blank">[新闻]中国软件协会：SAP羞辱国产软件是不正当竞争</a>]]></description></item><item><title>ScriptManager EnablePageMethods 与 JSON 序列化</title><link>http://www.cnblogs.com/jeff377/archive/2008/08/26/1277034.html</link><dc:creator>jeff377</dc:creator><author>jeff377</author><pubDate>Tue, 26 Aug 2008 13:29:00 GMT</pubDate><guid>http://www.cnblogs.com/jeff377/archive/2008/08/26/1277034.html</guid><wfw:comment>http://www.cnblogs.com/jeff377/comments/1277034.html</wfw:comment><comments>http://www.cnblogs.com/jeff377/archive/2008/08/26/1277034.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/jeff377/comments/commentRss/1277034.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jeff377/services/trackbacks/1277034.html</trackback:ping><description><![CDATA[<p>当设定 ScriptManager 控件的 EnablePageMethods 属性值为 True 时，我们可以从客户端指令码呼叫 ASP.NET 网页中的公用静态网页方法，而且它预设就支持 JSON 序列化。在本文中将使用 ScriptManager 的 PageMethods，重新做一次上篇「<a href="http://www.cnblogs.com/jeff377/archive/2008/08/26/1276966.html">CallBack PageCommand 与 JSON 序列化</a>」文章的范例，来比较「CallBack PageCommand」及 「ScriptManager PageMethods」之间的差异。<br />
&nbsp;<br />
我们先来复习上篇范例 CallBack PageCommand 的运作流程如下</p>
<p><br />
客户端物件 -&gt; <span style="color: red"><strong>1.客户端 JSON 序列化</strong></span> -&gt; CallBack 呼叫伺服端 -&gt; <strong style="color: red">2.伺服服端 JSON 反序列化还原对象</strong> -&gt; 修改对象属性<br />
-&gt; <span style="color: red"><strong>3.伺服端 JSON 序列化</strong></span> -&gt; CallBack 回传客户端 -&gt; <span style="color: red"><strong>4.客户端 JSON 反序列化还原物件</strong></span>&nbsp;<br />
&nbsp;<br />
相同的需求，以 ScriptManager PageMethods 改写的运作流程式如下</p>
<p><br />
客户端物件 -&gt; <span style="color: red"><strong>1.呼叫伺服端的静态方法</strong></span>-&gt; 修改对象属性 -&gt; <strong style="color: red">2.接收伺服端回传的回呼函式</strong><br />
&nbsp;<br />
接下来我们就利用 ScriptManager PageMethods 来实作上述的范例，首先将 ScriptManager 控件的 EnablePageMethods 属性值设为 True。</p>
<p><br />
&lt;asp:ScriptManager ID="ScriptManager1" runat="server" <span style="color: red"><strong>EnablePageMethods="True" </strong></span>&gt;<br />
&nbsp;<br />
在页面上放置一个 HTMLButton，按钮 onclick 时执行 CallServer 函式来呼叫伺服端的静态方法。其中 CallServer 函式中会呼叫 GetUser 产生对象，ASP.NET 机制会自动将此对象利用 JSON 序列化，传给伺服端的 GetServerUser 静态方法。当伺服端执行结束，会以 CallServerResult 函式接回伺服端回传的结果并显示对象属性值。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; background-color: #ffff00">&lt;%</span><span style="color: #000000; background-color: #f5f5f5">@&nbsp;Page&nbsp;Language</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">VB</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;AutoEventWireup</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">true</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;CodeFile</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">Default.aspx.vb</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;Inherits</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">_Default</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.1//EN"&nbsp;"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html&nbsp;</span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://www.w3.org/1999/xhtml"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head&nbsp;</span><span style="color: #ff0000">runat</span><span style="color: #0000ff">="server"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">PageMethod</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">script&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="text/jscript"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">function</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;GetUser(){<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;oUser</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ID&nbsp;:&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">007</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name&nbsp;:&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">jeff</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">return</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;oUser;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; background-color: #f5f5f5">//</span><span style="color: #008000; background-color: #f5f5f5">执行伺服端函式</span><span style="color: #008000; background-color: #f5f5f5"><br />
</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;CallServer(){<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;oUser&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;GetUser();&nbsp;</span><span style="color: #008000; background-color: #f5f5f5">//</span><span style="color: #008000; background-color: #f5f5f5">准备传给伺服端的对象</span><span style="color: #008000; background-color: #f5f5f5"><br />
</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PageMethods.GetServerUser(oUser,&nbsp;CallServerResult);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; background-color: #f5f5f5">//</span><span style="color: #008000; background-color: #f5f5f5">回呼函式</span><span style="color: #008000; background-color: #f5f5f5"><br />
</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;CallServerResult(result){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; background-color: #f5f5f5">//</span><span style="color: #008000; background-color: #f5f5f5">显示&nbsp;CallBack&nbsp;后的对象</span><span style="color: #008000; background-color: #f5f5f5"><br />
</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000; background-color: #f5f5f5">'</span><span style="color: #000000; background-color: #f5f5f5">Server:\n</span><span style="color: #000000; background-color: #f5f5f5">'</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">'</span><span style="color: #000000; background-color: #f5f5f5">ID:</span><span style="color: #000000; background-color: #f5f5f5">'</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">result.ID</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">'</span><span style="color: #000000; background-color: #f5f5f5">\nName:</span><span style="color: #000000; background-color: #f5f5f5">'</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">result.Name);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<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"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">form&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="form1"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:ScriptManager&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="ScriptManager1"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;EnablePageMethods</span><span style="color: #0000ff">="True"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:ScriptManager</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="button"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="执行&nbsp;PageMethod"</span><span style="color: #ff0000">&nbsp;onclick</span><span style="color: #0000ff">="CallServer()"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;&lt;</span><span style="color: #800000">br&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">form</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span></div>
<p>&nbsp;</p>
<p>再来撰写伺服端的 GetServerUser 静态方法，并以 &lt;System.Web.Services.WebMethod&gt; 标记此方法。GetServerUser 方法的 Value 参数为 TUserData 型别，ASP.NET 机制会自动传客户端传入的字符串利用 JSON 反序列化为 TUserData 型别的对象，在此方法中修改对象的属性值，再回传给客户端。</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">System.Web.Services.WebMethod()</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;_<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Shared</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Function</span><span style="color: #000000">&nbsp;GetServerUser(</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;Value&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;TUserData)&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;TUserData<br />
&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;Value.ID&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">012</span><span style="color: #800000">"</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Value.Name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">tony</span><span style="color: #800000">"</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Return</span><span style="color: #000000">&nbsp;Value<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Function</span><span style="color: #000000"><br />
<br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">Serializable()</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;_<br />
</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Class</span><span style="color: #000000">&nbsp;TUserData<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;FID&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">.Empty<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;FName&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">.Empty<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Property</span><span style="color: #000000">&nbsp;ID()&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Get</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Return</span><span style="color: #000000">&nbsp;FID<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Get</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Set</span><span style="color: #000000">(</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;value&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FID&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Set</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Property</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Property</span><span style="color: #000000">&nbsp;Name()&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Get</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Return</span><span style="color: #000000">&nbsp;FName<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Get</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Set</span><span style="color: #000000">(</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;value&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Set</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Property</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">End&nbsp;Class</span></div>
<p>&nbsp;</p>
<p>执行结果如下</p>
<p><img height="401" alt="" src="http://files.dotblogs.com.tw/jeff377/0808/ScriptManagerEnablePageMethodsJSON_11E2D/image_2.png" width="459" border="0" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="color: #0000ff"><span style="color: #0000ff"><strong style="font-size: 12pt">结论：「ScriptManager PageMethods」与「CallBack PageCommand」比较</strong></span></span></p>
<p>&nbsp;</p>
<p>依上述的示范，会不会发觉同样的需求使用「ScriptManager PageMethods」比「CallBack PageCommand」来处理显的更简单了，在「ScriptManager PageMethods」的运作流程中虽然使用了 JSON 序列化，可是在程序代码中完全不需自行处理 JSON 序列化/反序列化的动作。<br />
理论上「ScriptManager PageMethods」应该可完全取代「CallBack PageCommand」，不过事实上并不尽然，正确的说是依使用时机而定。因为「ScriptManager PageMethods」是呼叫伺服端的静态方法，所以无法存取页面上的控件，而「CallBack PageCommand」则可以存取页面上的控件；在执行效能上「ScriptManager PageMethods」会优于「CallBack PageCommand」，因为它省略页面控件加载的动作。<br />
</p>
<img src ="http://www.cnblogs.com/jeff377/aggbug/1277034.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41923/" target="_blank">[新闻]福布斯：Facebook网站十大最火爆游戏</a>]]></description></item><item><title>CallBack PageCommand 与 JSON 序列化</title><link>http://www.cnblogs.com/jeff377/archive/2008/08/26/1276966.html</link><dc:creator>jeff377</dc:creator><author>jeff377</author><pubDate>Tue, 26 Aug 2008 11:45:00 GMT</pubDate><guid>http://www.cnblogs.com/jeff377/archive/2008/08/26/1276966.html</guid><wfw:comment>http://www.cnblogs.com/jeff377/comments/1276966.html</wfw:comment><comments>http://www.cnblogs.com/jeff377/archive/2008/08/26/1276966.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/jeff377/comments/commentRss/1276966.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jeff377/services/trackbacks/1276966.html</trackback:ping><description><![CDATA[<p>上一篇「<a id="homepage1_HomePageDays_DaysList_ctl00_DayItem_DayList_ctl00_TitleUrl" href="http://www.cnblogs.com/jeff377/archive/2008/08/21/1272691.html"><font color="#223355">CallBack PageCommand 与 JSON 初体验</font></a>」中说明了在 CallBack 时，客户端可以接收伺服端传回的 JSON 字符串，在客户端 eval 取得 JSON 对象，使 JavaScript 可以直接操作伺服端传回的对象。其实在 ASP.NET AJAX 1.0 有提供相关类别来处理伺服端/客户端的 JSON 序列化/反列序化的需求。<br />
</p>
<p>伺服端处理 JSON 序列化的类别为<br />
<strong style="color: #0000ff"><span style="color: red"><strong style="color: #0000ff">System.Web.Script.Serialization.JavaScriptSerializer</strong></span><br />
</strong></p>
<p>在伺服端处理序列化/反序列化的函式如下<br />
</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&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;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;JSON&nbsp;序列化。<br />
&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;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="Value"&gt;</span><span style="color: #008000">物件。</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #808080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Shared</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Function</span><span style="color: #000000">&nbsp;JsonSerialize(</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;Value&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Object</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;oSerializer&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;System.Web.Script.Serialization.JavaScriptSerializer<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oSerializer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">New</span><span style="color: #000000">&nbsp;System.Web.Script.Serialization.JavaScriptSerializer()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Return</span><span style="color: #000000">&nbsp;oSerializer.Serialize(Value)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Function</span><span style="color: #000000"><br />
<br />
&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;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;JSON&nbsp;反序列化。<br />
&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;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="Text"&gt;</span><span style="color: #008000">JSON&nbsp;字符串。</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #808080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Shared</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Function</span><span style="color: #000000">&nbsp;JsonDeserialize(</span><span style="color: #0000ff">Of</span><span style="color: #000000">&nbsp;T)(</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;Text&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;T<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;oSerializer&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;System.Web.Script.Serialization.JavaScriptSerializer<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oSerializer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">New</span><span style="color: #000000">&nbsp;System.Web.Script.Serialization.JavaScriptSerializer()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Return</span><span style="color: #000000">&nbsp;oSerializer.Deserialize(</span><span style="color: #0000ff">Of</span><span style="color: #000000">&nbsp;T)(Text)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Function</span></div>
<p>&nbsp;</p>
<p>客户端处理 JSON 序列化的类别为<br />
<span style="color: #0000ff"><strong>Sys.Serialization.JavaScriptSerializer</strong></span></p>
<p>&nbsp;</p>
<p>JSON 序列化<br />
var sJson= Sys.Serialization.JavaScriptSerializer.serialize(oObject)</p>
<p><br />
JSON 反序列化<br />
var oObject = Sys.Serialization.JavaScriptSerializer.deserialize(sJson)<br />
&nbsp;<br />
我们来撰写一个范例测试客户端/伺服端 JSON 对象的传递，程序运作流程如下</p>
<p><br />
客户端物件 -&gt; <span style="color: #ff0000"><strong>1.客户端 JSON 序列化</strong></span> -&gt; CallBack 呼叫伺服端 -&gt; <span style="color: #ff0000"><strong>2.伺服服端 JSON 反序列化还原对象</strong></span> -&gt; 修改对象属性<br />
-&gt; <span style="color: #ff0000"><strong>3.伺服端 JSON 序列化</strong></span> -&gt; CallBack 回传客户端 -&gt; <span style="color: #ff0000"><strong>4.客户端 JSON 反序列化还原物件</strong></span><br />
&nbsp;<br />
首先修改 GetCallBackPageCommandEventReference 方法，原本 CommandArgument 是使用字符串常数，现修改为呼叫客户端 GetPageCommandParam 函式。</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&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;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;取得以&nbsp;CallBack&nbsp;方式引发&nbsp;PageCommand&nbsp;事件的客户端指令码。<br />
&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;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="CommandName"&gt;</span><span style="color: #008000">命令名称。</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="CommandArgument"&gt;</span><span style="color: #008000">命令自变量。</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="ClientCallback"&gt;</span><span style="color: #008000">可接收成功的服务器端事件结果的客户端事件处理例程名称。</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="Context"&gt;</span><span style="color: #008000">在启始回呼之前，于客户端上评估的客户端指令码。</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #808080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Function</span><span style="color: #000000">&nbsp;GetCallBackPageCommandEventReference(</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;CommandName&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">,&nbsp;_<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;CommandArgument&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">,&nbsp;_<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;ClientCallback&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;Context&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;sArgument&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">sArgument&nbsp;=&nbsp;String.Format("'{0}${1}${2}'",&nbsp;PageEvent.PageCommand,&nbsp;CommandName,&nbsp;CommandArgument)</span><span style="color: #008000"><br />
</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">PageCommand&nbsp;事件会执行客户端&nbsp;GetPageCommandParam&nbsp;函式</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sArgument&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">.Format(</span><span style="color: #800000">"</span><span style="color: #800000">GetPageCommandParam('{0}',{1})</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;CommandName,&nbsp;CommandArgument)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Me</span><span style="color: #000000">.GetCallbackEventReference(FPage,&nbsp;sArgument,&nbsp;ClientCallback,&nbsp;Context)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Function</span></div>
<p>&nbsp;</p>
<p>客户端对应的 GetPageCommandParam 函式如下</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;GetPageCommandParam(commnadName,value){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;sArgument&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Sys.Serialization.JavaScriptSerializer.serialize(value);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">PageCommand$</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">commnadName</span><span style="color: #000000">+</span><span style="color: #000000">'</span><span style="color: #000000">$</span><span style="color: #000000">'</span><span style="color: #000000">+</span><span style="color: #000000">sArgument;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<p>&nbsp;</p>
<p>在页面上放置一个按钮，利用 GetCallBackPageCommandEventReference 来取得 CallBack PageCommand 的客户端指令码。其中 CommandArgument 自变量为 GetUser() ，此为执行 CallBack 时执行客户端的函式。ReceiveServerData 函式则是接收伺服端回传的结果。</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Button1.OnClientClick&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Me</span><span style="color: #000000">.BeeScript.GetCallBackPageCommandEventReference(&nbsp;_<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">User</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">GetUser()</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">ReceiveServerData</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #800000">""</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">;return&nbsp;false;</span><span style="color: #800000">"</span></div>
<p>&nbsp;</p>
<p>伺服端的完整程序代码 (aspx.vb) 如下，在 PageCommand 事件中会接收客户端传入的 JSON 字符串将其转为对象，修改此对象属性值再回传给客户端。在伺服端会执行程序流程中的「<strong style="color: #ff0000">2.伺服服端 JSON 反序列化还原对象</strong>」及「<span style="color: #ff0000"><strong>3.伺服端 JSON 序列化</strong></span>」二个步骤。</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&lt;</span><span style="color: #000000">Serializable()</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;_<br />
</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Class</span><span style="color: #000000">&nbsp;TUserData<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;FID&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">.Empty<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;FName&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">.Empty<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Property</span><span style="color: #000000">&nbsp;ID()&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Get</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Return</span><span style="color: #000000">&nbsp;FID<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Get</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Set</span><span style="color: #000000">(</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;value&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FID&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Set</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Property</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Property</span><span style="color: #000000">&nbsp;Name()&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Get</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Return</span><span style="color: #000000">&nbsp;FName<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Get</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Set</span><span style="color: #000000">(</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;value&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Set</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Property</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">End&nbsp;Class</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">Partial</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Class</span><span style="color: #000000">&nbsp;_Default<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Inherits</span><span style="color: #000000">&nbsp;Bee.Web.TBBasePage<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;Page_Load(</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;sender&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Object</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;e&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;System.EventArgs)&nbsp;</span><span style="color: #0000ff">Handles</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Me</span><span style="color: #000000">.Load<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Button1.OnClientClick&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Me</span><span style="color: #000000">.BeeScript.GetCallBackPageCommandEventReference(&nbsp;_<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">User</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">GetUser()</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">ReceiveServerData</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #800000">""</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">;return&nbsp;false;</span><span style="color: #800000">"</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;_Default_PageCommand(</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;sender&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Object</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;e&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;Bee.Web.TBBasePage.PageCommandEventArgs)&nbsp;</span><span style="color: #0000ff">Handles</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Me</span><span style="color: #000000">.PageCommand<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;oUser&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;TUserData<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;sJson&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">2.伺服服端&nbsp;JSON&nbsp;反序列化还原对象</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oUser&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;JsonDeserialize(</span><span style="color: #0000ff">Of</span><span style="color: #000000">&nbsp;TUserData)(e.CommandArgument)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oUser.ID&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">012</span><span style="color: #800000">"</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oUser.Name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">tony</span><span style="color: #800000">"</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">3.伺服端&nbsp;JSON&nbsp;序列化</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sJson&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Bee.Web.WebFunc.JsonSerialize(oUser)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.CallbackResult&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sJson<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">End&nbsp;Class</span></div>
<p>&nbsp;</p>
<p>执行 CallBack 的按钮，输出的 HTML 码如下</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="submit"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="Button1"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="執行&nbsp;PageCommand"</span><span style="color: #ff0000">&nbsp;onclick</span><span style="color: #0000ff">="WebForm_DoCallback('__Page',GetPageCommandParam('User',GetUser()),ReceiveServerData,&amp;quot;&amp;quot;,null,false);return&nbsp;false;"</span><span style="color: #ff0000">&nbsp;id</span><span style="color: #0000ff">="Button1"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span></div>
<p>&nbsp;</p>
<p>客户端的 JavaScrpt 程序代码如下所示，其中 GetUser 函式会取得 oUser 类别，包含 ID 及 Name 二个属性。执行按钮后会呼叫 GetPageCommandParam 函式，将 GetUser 取得对象执行步骤「<strong style="color: #ff0000">1.客户端 JSON 序列化</strong>」，而伺服端回传给呼叫 ReceiveServerData 函式，执行步骤「<span style="color: #ff0000"><strong>4.客户端 JSON 反序列化还原对象</strong></span>」，并显示 CallBack 后的对象。</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">script&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">text/jscript</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;ReceiveServerData(value){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">4.客户端&nbsp;JSON&nbsp;反序列化还原物件</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;oUser&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Sys.Serialization.JavaScriptSerializer.deserialize(value)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">显示&nbsp;CallBack&nbsp;后的对象</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">'</span><span style="color: #000000">Server:\n</span><span style="color: #000000">'</span><span style="color: #000000">+</span><span style="color: #000000">'</span><span style="color: #000000">ID:</span><span style="color: #000000">'</span><span style="color: #000000">+</span><span style="color: #000000">oUser.ID</span><span style="color: #000000">+</span><span style="color: #000000">'</span><span style="color: #000000">\nName:</span><span style="color: #000000">'</span><span style="color: #000000">+</span><span style="color: #000000">oUser.Name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;GetUser(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;oUser</span><span style="color: #000000">=</span><span style="color: #000000">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ID&nbsp;:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">007</span><span style="color: #000000">"</span><span style="color: #000000">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name&nbsp;:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">jeff</span><span style="color: #000000">"</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;oUser;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;GetPageCommandParam(commnadName,value){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">1.客户端&nbsp;JSON&nbsp;序列化</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;sArgument&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Sys.Serialization.JavaScriptSerializer.serialize(value);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">PageCommand$</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">commnadName</span><span style="color: #000000">+</span><span style="color: #000000">'</span><span style="color: #000000">$</span><span style="color: #000000">'</span><span style="color: #000000">+</span><span style="color: #000000">sArgument;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">/</span><span style="color: #000000">script&gt;</span></div>
<p>&nbsp;</p>
<p>执行结果如下</p>
<p><img height="401" alt="" src="http://files.dotblogs.com.tw/jeff377/0808/CallBackPageCommandJson.NET2.0_12E91/image_2.png" width="459" border="0" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/jeff377/aggbug/1276966.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41923/" target="_blank">[新闻]福布斯：Facebook网站十大最火爆游戏</a>]]></description></item><item><title>CallBack PageCommand 与 JSON 初体验</title><link>http://www.cnblogs.com/jeff377/archive/2008/08/21/1272691.html</link><dc:creator>jeff377</dc:creator><author>jeff377</author><pubDate>Wed, 20 Aug 2008 22:24:00 GMT</pubDate><guid>http://www.cnblogs.com/jeff377/archive/2008/08/21/1272691.html</guid><wfw:comment>http://www.cnblogs.com/jeff377/comments/1272691.html</wfw:comment><comments>http://www.cnblogs.com/jeff377/archive/2008/08/21/1272691.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/jeff377/comments/commentRss/1272691.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jeff377/services/trackbacks/1272691.html</trackback:ping><description><![CDATA[<p>JavaScript对象标记法，英文名称 JavaScript Object Notation(简称JSON)，是一种文字格式标记法，相较于 XML 而言，JSON 明显更为简洁。而 JSON 这种精简的数据表示方式，非常适合用于 AJAX 的数据转输。<br />
我们使用「BasePage 撰写 PageCommand 事件 (使用 CallBack)」一文中提及的 PageCommand 来执行 AJAX，并在 PageCommand 事件中回传 JSON 字符串，客户端以 JavaScript 取得回传的 JSON 对象。<br />
</p>
<p>在页面上放置一个 Button 来执行 CallBack PageCommand，Button.OnClientClick 使用 GetCallBackPageCommandEventReference 方法取得执行 PageCommand 事件的客户端指令码，客户端以 ReceiveServerData JavaScript 函式来接收伺服端的回传数据。当引发 PageCommand 时，透过 e.CallbackResult 属性来回传 JSON 字符串给客户端的 ReceiveServerData 函式。</p>
<p>&nbsp;</p>
<p>aspx.vb 的程序代码如下</p>
<div class="cnblogs_code"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">Partial</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Class</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Default</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Inherits</span><span style="color: #000000;">&nbsp;Bee.Web.TBBasePage<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Protected</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Sub</span><span style="color: #000000;">&nbsp;Page_Load(</span><span style="color: #0000ff;">ByVal</span><span style="color: #000000;">&nbsp;sender&nbsp;</span><span style="color: #0000ff;">As</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Object</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">ByVal</span><span style="color: #000000;">&nbsp;e&nbsp;</span><span style="color: #0000ff;">As</span><span style="color: #000000;">&nbsp;System.EventArgs)&nbsp;</span><span style="color: #0000ff;">Handles</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Me</span><span style="color: #000000;">.Load<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Button1.OnClientClick&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Me</span><span style="color: #000000;">.BeeScript.GetCallBackPageCommandEventReference(</span><span style="color: #800000;">"</span><span style="color: #800000;">JSON</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">""</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">ReceiveServerData</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">""</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">;return&nbsp;false;</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">End&nbsp;Sub</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Protected</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Sub</span><span style="color: #000000;">&nbsp;Page_PageCommand(</span><span style="color: #0000ff;">ByVal</span><span style="color: #000000;">&nbsp;sender&nbsp;</span><span style="color: #0000ff;">As</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Object</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">ByVal</span><span style="color: #000000;">&nbsp;e&nbsp;</span><span style="color: #0000ff;">As</span><span style="color: #000000;">&nbsp;TBBasePage.PageCommandEventArgs)&nbsp;</span><span style="color: #0000ff;">Handles</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Me</span><span style="color: #000000;">.PageCommand<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.CallbackResult&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">{'myCats':&nbsp;[&nbsp;{'name':&nbsp;'Hero',&nbsp;'age':&nbsp;5,&nbsp;'color':&nbsp;'silver'&nbsp;},&nbsp;{'name':&nbsp;'Euro',&nbsp;'age':&nbsp;2,&nbsp;'color':&nbsp;['brown',&nbsp;'white',&nbsp;'black']}]}</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">End&nbsp;Sub</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">End&nbsp;Class</span></div>
<p>&nbsp;</p>
<p>客户端负责接收 CallBack 伺服端回传数据的 ReceiveServerData 函式如下所示，会将传回的 JOSN 字符串使用 eval 函式来转换为 JSON 对象。</p>
<div class="cnblogs_code"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">script&nbsp;type</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">text/jscript</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;ReceiveServerData(value){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;obj&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;eval&nbsp;(</span><span style="color: #000000;">"</span><span style="color: #000000;">(</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;value&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">)</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000;">'</span><span style="color: #000000;">I&nbsp;have&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;obj.myCats.length&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;cats.</span><span style="color: #000000;">'</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(obj.myCats[</span><span style="color: #000000;">0</span><span style="color: #000000;">].name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(obj.myCats[</span><span style="color: #000000;">1</span><span style="color: #000000;">].name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">/</span><span style="color: #000000;">script&gt;</span></div>
<p>&nbsp;</p>
<p>执行结果如下</p>
<p> <img alt="" src="http://files.dotblogs.com.tw/jeff377/0808/CallBackPageCommandJSON_8AE/image_2.png" width="194" height="121" /><br />
</p>
<p>&nbsp;</p>
<p><img alt="" src="http://files.dotblogs.com.tw/jeff377/0808/CallBackPageCommandJSON_8AE/image_4.png" width="194" height="121" /></p>
<p>&nbsp;</p>
<p><img alt="" src="http://files.dotblogs.com.tw/jeff377/0808/CallBackPageCommandJSON_8AE/image_6.png" width="194" height="121" /></p>
<p>&nbsp;</p>
<p>参考数据:<br />
<a href="http://www.json.org/">http://www.json.org/</a><br />
<a href="http://caterpillar.onlyfun.net/Gossip/AjaxGossip/JSON.html">http://caterpillar.onlyfun.net/Gossip/AjaxGossip/JSON.html</a><br />
</p><img src ="http://www.cnblogs.com/jeff377/aggbug/1272691.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41922/" target="_blank">[新闻]谷歌允许用户评论搜索结果调整顺序</a>]]></description></item><item><title>寻找指定型别的父控件</title><link>http://www.cnblogs.com/jeff377/archive/2008/08/20/1272592.html</link><dc:creator>jeff377</dc:creator><author>jeff377</author><pubDate>Wed, 20 Aug 2008 14:12:00 GMT</pubDate><guid>http://www.cnblogs.com/jeff377/archive/2008/08/20/1272592.html</guid><wfw:comment>http://www.cnblogs.com/jeff377/comments/1272592.html</wfw:comment><comments>http://www.cnblogs.com/jeff377/archive/2008/08/20/1272592.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/jeff377/comments/commentRss/1272592.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jeff377/services/trackbacks/1272592.html</trackback:ping><description><![CDATA[一般我们可以使用 FindControl 去找到子控件，但是若我们需要去找指定型别的父控件要如何寻找呢？例如去寻找指定 TextBox 控件所属的 UpdatePanel 父控件。针对上述的需求，以下将提供解决方式。<br />
在 Control 有一个 Parent 属性，表示该控件的父控件，所以我们可以利用递归方式逐层往上判断 Parent 属性是否为指定型别，符合的话传回该父控件。以下的 FindParent 函式就是在寻找指定型别的父控件。<br />
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&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;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;尋找指定型別的父控制項。<br />
&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;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="Control"&gt;</span><span style="color: #008000">控制項。</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="Type"&gt;</span><span style="color: #008000">欲尋找的型別。</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #808080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Shared</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Function</span><span style="color: #000000">&nbsp;FindParent(</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;Control&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;Control,&nbsp;</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;Type&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;System.Type)&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;Control<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;Control.Parent&nbsp;</span><span style="color: #0000ff">Is</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Nothing</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Nothing</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Else</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;Type.IsInstanceOfType(Control.Parent)&nbsp;</span><span style="color: #0000ff">Then</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: #0000ff">Return</span><span style="color: #000000">&nbsp;Control.Parent<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Else</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: #0000ff">Return</span><span style="color: #000000">&nbsp;FindParent(Control.Parent,&nbsp;Type)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Function</span></div>
<p>&nbsp;</p>
如果要寻找 TextBox 所属的 UpdatePanel 则可以撰写如下程序代码即可。
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;oParent&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;Control<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oParent&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;FindParent(TextBox1,&nbsp;</span><span style="color: #0000ff">GetType</span><span style="color: #000000">(UpdatePanel))</span></div>
<img src ="http://www.cnblogs.com/jeff377/aggbug/1272592.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41921/" target="_blank">[新闻]Internet 另一超级漏洞被公布</a>]]></description></item><item><title>物件序列化函式库</title><link>http://www.cnblogs.com/jeff377/archive/2008/08/19/1271801.html</link><dc:creator>jeff377</dc:creator><author>jeff377</author><pubDate>Tue, 19 Aug 2008 15:54:00 GMT</pubDate><guid>http://www.cnblogs.com/jeff377/archive/2008/08/19/1271801.html</guid><wfw:comment>http://www.cnblogs.com/jeff377/comments/1271801.html</wfw:comment><comments>http://www.cnblogs.com/jeff377/archive/2008/08/19/1271801.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/jeff377/comments/commentRss/1271801.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jeff377/services/trackbacks/1271801.html</trackback:ping><description><![CDATA[摘要: 序列化是将对象状态转换为可保存或可传输格式的处理序。序列化的反面是还原序列化，它可以将数据流转换成对象。在 .NET 程序中常用的序列化方式如下表所示。 序列化类别 说明 .NET Framework 版本 XmlSerializer XML 序列化 2.0 SoapFormatter SOAP 序列化 2.0 BinaryFormatter 二进制序列化 2.0 DataContractSeri&nbsp;&nbsp;<a href='http://www.cnblogs.com/jeff377/archive/2008/08/19/1271801.html'>阅读全文</a><img src ="http://www.cnblogs.com/jeff377/aggbug/1271801.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41920/" target="_blank">[新闻]3 个独特的未来搜索引擎</a>]]></description></item><item><title>BasePage 撰写 PageCommand 事件 (使用 CallBack)</title><link>http://www.cnblogs.com/jeff377/archive/2008/08/03/1259052.html</link><dc:creator>jeff377</dc:creator><author>jeff377</author><pubDate>Sat, 02 Aug 2008 16:38:00 GMT</pubDate><guid>http://www.cnblogs.com/jeff377/archive/2008/08/03/1259052.html</guid><wfw:comment>http://www.cnblogs.com/jeff377/comments/1259052.html</wfw:comment><comments>http://www.cnblogs.com/jeff377/archive/2008/08/03/1259052.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnblogs.com/jeff377/comments/commentRss/1259052.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jeff377/services/trackbacks/1259052.html</trackback:ping><description><![CDATA[<p><span style="color: #0000ff"><strong style="font-size: 12pt">前言<br />
</strong></span>在「<a href="http://www.cnblogs.com/jeff377/archive/2008/08/02/1258615.html">BasePage 撰写 PageCommand 事件</a>」一文中说明如何在 PostBack 时引发 PageCommand 事件，本文将依此继续扩展，让 CallBack 也同样可以引发相同的 PageCommand 事件。<br />
一般的 PostBack 会将整个页面的数据至伺服端，当伺服端处理完毕时，也是整个页面 Render 回传给客户端呈现；CallBack 是传开发人员定义的数据至伺服端，当伺服端处理完毕时，只传回字符串给自订的 JavaScript 函式处理。CallBack 比起 PostBack 相对轻量而有效率，二者可以视时机配合使用。例如页面数据数据储存时，整个页面的数据需要传至伺服端做储存动作，这时就适合使用 PostBack 处理；而当执行动作无须传回页面的所有数据时，例如在订单表身登打产品名称后，需要带回相对的产品编号、售价、单位...等相关资料，就非常适合使用 CallBack 来处理。<br />
以「BasePage 撰写 PageCommand 事件」一文中的案例，当客户端响应讯问后传入伺服端时执行送审动作时，其实无须传回页面所有字段，只需传回客户端的响应值，所以这个案例其实比较适合使用 CallBack 来处理即可，整个程序执行流程如下。<br />
按储存钮(客户端) -&gt; PostBack -&gt; 请假单储存(伺服端) -&gt; 弹出询问讯息(客户端) -&gt; CallBack -&gt; 取得客户端响应决定是否送审(伺服端)<br />
在本文将描述如何让 CallBack 也可以引发 PageCommand 事件，而以上述的相同案例，改用 CallBack 方式的 PageCommand 事件来处理。<br />
&nbsp;<br />
<span style="color: #0000ff"><strong style="font-size: 12pt">程序实作</strong></span><br />
以「BasePage 撰写 PageCommand 事件」中的 TBBasePage 类别及 TBScriptManager 类别做扩展。首先 TBBasePage 类别需实作 CallBack 引发 PageCommand 事件，作法如下。<br />
1.修改 PageCommand 事件自变量，加入 CallbackResult 属性，做为使用 CallBack 执行结果的回传字符串。 <br />
2.实作 ICallbackEventHandler 界面。 <br />
3.在 RaiseCallbackEvent 方法，判断 CallBack 的传入参数，决定是否引发 PageCommand 事件。<br />
</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />
</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;页面基础类别。<br />
</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #808080"><br />
</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Class</span><span style="color: #000000">&nbsp;TBBasePage<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Inherits</span><span style="color: #000000">&nbsp;System.Web.UI.Page<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Implements</span><span style="color: #000000">&nbsp;System.Web.UI.ICallbackEventHandler<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;FCallbackResult&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">.Empty<br />
<br />
</span><span style="color: #0000ff">#Region</span><span style="color: #000000">&nbsp;"&nbsp;PageCommand&nbsp;事件&nbsp;"</span><span style="color: #000000"><br />
<br />
&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;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;DayCommand&nbsp;事件自变量。<br />
&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: #808080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Class</span><span style="color: #000000">&nbsp;PageCommandEventArgs<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Inherits</span><span style="color: #000000">&nbsp;System.EventArgs<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;FCommandName&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">.Empty<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;FCommandArgument&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">.Empty<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;FCallbackResult&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">.Empty<br />
<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;命令名称。<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: #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">Property</span><span style="color: #000000">&nbsp;CommandName()&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Get</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: #0000ff">Return</span><span style="color: #000000">&nbsp;FCommandName<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Get</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Set</span><span style="color: #000000">(</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;value&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FCommandName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Set</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Property</span><span style="color: #000000"><br />
<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;命令自变量。<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: #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">Property</span><span style="color: #000000">&nbsp;CommandArgument()&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Get</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: #0000ff">Return</span><span style="color: #000000">&nbsp;FCommandArgument<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Get</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Set</span><span style="color: #000000">(</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;value&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FCommandArgument&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Set</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Property</span><span style="color: #000000"><br />
<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;CallBack&nbsp;执行结果的回传字符串。<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: #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">Property</span><span style="color: #000000">&nbsp;CallbackResult()&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Get</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: #0000ff">Return</span><span style="color: #000000">&nbsp;FCallbackResult<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Get</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Set</span><span style="color: #000000">(</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;value&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FCallbackResult&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Set</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Property</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Class</span><span style="color: #000000"><br />
<br />
&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;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;页面命令事件。<br />
&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: #808080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;_<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.ComponentModel.Description(</span><span style="color: #800000">"</span><span style="color: #800000">页面命令事件。</span><span style="color: #800000">"</span><span style="color: #000000">)&nbsp;_<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;_<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Event</span><span style="color: #000000">&nbsp;PageCommand(</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;sender&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Object</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;e&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;PageCommandEventArgs)<br />
<br />
&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;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;引发&nbsp;PageCommand&nbsp;事件。<br />
&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: #808080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Overridable</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;OnPageCommand(</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;e&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;PageCommandEventArgs)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">RaiseEvent</span><span style="color: #000000">&nbsp;PageCommand(</span><span style="color: #0000ff">Me</span><span style="color: #000000">,&nbsp;e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">#End&nbsp;Region</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">#Region</span><span style="color: #000000">&nbsp;"&nbsp;ICallbackEventHandler&nbsp;界面&nbsp;"</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;RaiseCallbackEvent(</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;eventArgument&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">Implements</span><span style="color: #000000">&nbsp;System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;oArgument()&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;oEventArgs&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;PageCommandEventArgs<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oArgument&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Split</span><span style="color: #000000">(eventArgument,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">$</span><span style="color: #800000">"</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;oArgument.Length&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">3</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;SameText(oArgument(</span><span style="color: #800080">0</span><span style="color: #000000">),&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">PageCommand</span><span style="color: #800000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">Then</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">引发&nbsp;PageCommand&nbsp;事件</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;oEventArgs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">New</span><span style="color: #000000">&nbsp;PageCommandEventArgs()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oEventArgs.CommandName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;oArgument(</span><span style="color: #800080">1</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oEventArgs.CommandArgument&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;oArgument(</span><span style="color: #800080">2</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: #0000ff">Me</span><span style="color: #000000">.OnPageCommand(oEventArgs)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FCallbackResult&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;oEventArgs.CallbackResult<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Function</span><span style="color: #000000">&nbsp;GetCallbackResult()&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Implements</span><span style="color: #000000">&nbsp;System.Web.UI.ICallbackEventHandler.GetCallbackResult<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Return</span><span style="color: #000000">&nbsp;FCallbackResult<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Function</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">#End&nbsp;Region</span><span style="color: #000000"><br />
<br />
&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;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;判断二字符串是否相同(不区分大小写)。<br />
&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;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="S1"&gt;</span><span style="color: #008000">第一个字符串。</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="S2"&gt;</span><span style="color: #008000">第二个字符串。</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #808080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Shared</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Function</span><span style="color: #000000">&nbsp;SameText(</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;S1&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;S2&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Boolean</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;S1&nbsp;</span><span style="color: #0000ff">Is</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Nothing</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Return</span><span style="color: #000000">&nbsp;S2&nbsp;</span><span style="color: #0000ff">Is</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Nothing</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Return</span><span style="color: #000000">&nbsp;S1.Equals(S2,&nbsp;StringComparison.CurrentCultureIgnoreCase)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Function</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">End&nbsp;Class</span></div>
<p>&nbsp;</p>
<p>然后在 TBScriptManager 类别新增一个 GetCallBackPageCommandEventReference方法，取得使用 CallBack 方式引发 PageCommand 事件的客户端指令码。<br />
</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />
</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;客户端指令码管理。<br />
</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #808080"><br />
</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Class</span><span style="color: #000000">&nbsp;TBScriptManager<br />
<br />
&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;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;取得以&nbsp;CallBack&nbsp;方式引发&nbsp;PageCommand&nbsp;事件的客户端指令码。<br />
&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;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="CommandName"&gt;</span><span style="color: #008000">命令名称。</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="CommandArgument"&gt;</span><span style="color: #008000">命令自变量。</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="ClientCallback"&gt;</span><span style="color: #008000">可接收成功的服务器端事件结果的客户端事件处理例程名称。</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">'''</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="Context"&gt;</span><span style="color: #008000">叫用客户端回呼之客户端函式的名称。&nbsp;</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #808080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Function</span><span style="color: #000000">&nbsp;GetCallBackPageCommandEventReference(</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;CommandName&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">,&nbsp;_<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;CommandArgument&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">,&nbsp;_<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;ClientCallback&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;Context&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;sArgument&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sArgument&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">.Format(</span><span style="color: #800000">"</span><span style="color: #800000">'{0}${1}${2}'</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;PageEvent.PageCommand,&nbsp;CommandName,&nbsp;CommandArgument)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Me</span><span style="color: #000000">.GetCallbackEventReference(FPage,&nbsp;sArgument,&nbsp;ClientCallback,&nbsp;Context)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Function</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">End&nbsp;Class</span></div>
<p>&nbsp;</p>
<p>我们使用 CallBack 方式的 PageCommand 事件来重新改写程序，第一个阶段处理「请假单储存(伺服端) -&gt; 弹出询问讯息(客户端) 」，在下面的程序代码中，讯问讯息的的「确定钮」是使用 CallBack 方式引发 PageCommand 事件，「取消钮」则是使用 PostBack 方式引发 PageCommand 事件。</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;btnSave_Click(</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;sender&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Object</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;e&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;System.EventArgs)&nbsp;</span><span style="color: #0000ff">Handles</span><span style="color: #000000">&nbsp;btnSave.Click<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;sTrueScript&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;sFalseScript&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000"><br />
<br />
&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"><br />
&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;</span><span style="color: #008000">'</span><span style="color: #008000">確定鈕使用&nbsp;CallBack&nbsp;引發&nbsp;PageCommand&nbsp;事件</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sTrueScript&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Me</span><span style="color: #000000">.BeeScript.GetCallBackPageCommandEventReference(</span><span style="color: #800000">"</span><span style="color: #800000">SaveConfirm</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">True</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">null</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #800000">""</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">確定鈕使用&nbsp;PostBack&nbsp;引發&nbsp;PageCommand&nbsp;事件</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sFalseScript&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Me</span><span style="color: #000000">.BeeScript.GetPageCommandEventReference(</span><span style="color: #800000">"</span><span style="color: #800000">SaveConfirm</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">False</span><span style="color: #800000">"</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Me</span><span style="color: #000000">.BeeScript.Confirm(</span><span style="color: #800000">"</span><span style="color: #800000">假單要送審嗎?</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;sTrueScript,&nbsp;sFalseScript)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Sub</span></div>
<p>&nbsp;</p>
<p>第二阶段在 PageCommand 事件处理客户端询问讯息的响应「取得客户端响应决定是否送审(伺服端)」，在 PageCommand 事件中，无论是使用 PostBack 或 CallBack 都一样判断 e.CommandName 及 e.CommandArgument 来决定接续的执行动作即可。在 PageCommand 事件中可以用 Me.IsCallback=True 判断是否使用 CallBack 方式，若使用 CallBack 方式引发的 PageCommand 事件中需要回传数据至客户端，那可以使用 e.CallbackResult 来回传给自订的 JavaScript 函式做后续处理。</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;Page_PageCommand(</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;sender&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Object</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;e&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;Bee.Web.TBBasePage.PageCommandEventArgs)&nbsp;</span><span style="color: #0000ff">Handles</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Me</span><span style="color: #000000">.PageCommand<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">.Equals(e.CommandName,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">SaveConfirm</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;StringComparison.CurrentCultureIgnoreCase)&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">.Equals(e.CommandArgument,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">True</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;StringComparison.CurrentCultureIgnoreCase)&nbsp;</span><span style="color: #0000ff">Then</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">按了確定要執行的程式碼</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">Else</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">按了取消要執行的程式碼</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">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Sub</span></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/jeff377/aggbug/1259052.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41919/" target="_blank">[新闻]诺基亚新机N85 N79发布</a>]]></description></item><item><title>BasePage 撰写 PageCommand 事件</title><link>http://www.cnblogs.com/jeff377/archive/2008/08/02/1258615.html</link><dc:creator>jeff377</dc:creator><author>jeff377</author><pubDate>Sat, 02 Aug 2008 02:06:00 GMT</pubDate><guid>http://www.cnblogs.com/jeff377/archive/2008/08/02/1258615.html</guid><wfw:comment>http://www.cnblogs.com/jeff377/comments/1258615.html</wfw:comment><comments>http://www.cnblogs.com/jeff377/archive/2008/08/02/1258615.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/jeff377/comments/commentRss/1258615.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jeff377/services/trackbacks/1258615.html</trackback:ping><description><![CDATA[<p><span style="color: #0000ff"><strong style="font-size: 12pt">前言<br />
</strong></span>在「<a href="http://www.cnblogs.com/jeff377/archive/2008/08/01/1257819.html">撰写自用 Confirm 方法</a>」一文中提到的「案例三：先执行伺服端程序再弹出询问讯息，依客户端响