﻿<?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>BlogJava-有个空间-文章分类-.net编程技巧</title><link>http://www.blogjava.net/unilobster/category/46276.html</link><description>有个标题</description><language>zh-cn</language><lastBuildDate>Fri, 25 Mar 2011 13:06:37 GMT</lastBuildDate><pubDate>Fri, 25 Mar 2011 13:06:37 GMT</pubDate><ttl>60</ttl><item><title>vb asp.net error &lt;__o is not declared&gt;</title><link>http://www.blogjava.net/unilobster/articles/346408.html</link><dc:creator>游雯</dc:creator><author>游雯</author><pubDate>Wed, 16 Mar 2011 08:16:00 GMT</pubDate><guid>http://www.blogjava.net/unilobster/articles/346408.html</guid><wfw:comment>http://www.blogjava.net/unilobster/comments/346408.html</wfw:comment><comments>http://www.blogjava.net/unilobster/articles/346408.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/unilobster/comments/commentRss/346408.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/unilobster/services/trackbacks/346408.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="border-collapse: separate; color: #000000; font-family: Simsun; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px; text-align: left;">
<p style="margin: 0px 0px 1em; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; clear: both; word-wrap: break-word;"><a href="http://stackoverflow.com/questions/750902/how-do-i-get-rid-of-o-is-not-declared">FWD: http://stackoverflow.com/questions/750902/how-do-i-get-rid-of-o-is-not-declared</a></p>
<p style="margin: 0px 0px 1em; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; clear: both; word-wrap: break-word;">I've found the answer on the .net forums. It contains a good explanation of why ASP.Net is acting the way it is:</p>
<p style="margin: 0px 0px 1em; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; clear: both; word-wrap: break-word;">[quote]</p>
<p style="margin: 0px 0px 1em; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; clear: both; word-wrap: break-word;">We have finally obtained reliable repro and identified the underlying issue. A trivial repro looks like this:</p>
<pre class="default prettyprint" style="margin: 0px 0px 10px; padding: 5px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: #eeeeee; font-family: Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif; overflow: auto; width: auto; max-height: 600px;"><code style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: #eeeeee; font-family: Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;"><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">&nbsp;</span><span class="pun" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">&lt;%</span><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;"> </span><span class="kwd" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #00008b;">if</span><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;"> </span><span class="pun" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">(</span><span class="kwd" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #00008b;">true</span><span class="pun" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">)</span><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;"> </span><span class="pun" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">{</span><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;"> %&gt;<br />
</span><span class="pun" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">&lt;%=</span><span class="lit" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: maroon;">1</span><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">%&gt;<br />
</span><span class="pun" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">&lt;%</span><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;"> </span><span class="pun" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">}</span><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;"> %&gt;<br />
</span><span class="pun" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">&lt;%=</span><span class="lit" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: maroon;">2</span><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">%&gt;<br />
</span></code></pre>
<p style="margin: 0px 0px 1em; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; clear: both; word-wrap: break-word;">In order to provide intellisense in &lt;%= %&gt; blocks at design time, ASP.NET generates assignment to a temporary __o variable and language (VB or C#) then provide the intellisense for the variable. That is done when page compiler sees the first &lt;%= ... %&gt; block. But here, the block is inside the if, so after the if closes, the variable goes out of scope. We end up generating something like this:</p>
<pre class="default prettyprint" style="margin: 0px 0px 10px; padding: 5px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: #eeeeee; font-family: Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif; overflow: auto; width: auto; max-height: 600px;"><code style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: #eeeeee; font-family: Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;"><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">&nbsp; &nbsp;</span><span class="kwd" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #00008b;">if</span><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;"> </span><span class="pun" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">(</span><span class="kwd" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #00008b;">true</span><span class="pun" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">)</span><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;"> </span><span class="pun" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">{</span><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;"> <br />
&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="kwd" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #00008b;">object</span><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;"> </span><span class="lit" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: maroon;">@__o</span><span class="pun" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">;</span><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;"><br />
&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="lit" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: maroon;">@__o</span><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;"> </span><span class="pun" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">=</span><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;"> </span><span class="lit" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: maroon;">1</span><span class="pun" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">;</span><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;"><br />
&nbsp; &nbsp;</span><span class="pun" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">}</span><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;"><br />
&nbsp; &nbsp;</span><span class="lit" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: maroon;">@__o</span><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;"> </span><span class="pun" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">=</span><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;"> </span><span class="lit" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: maroon;">2</span><span class="pun" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">;</span><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;"><br />
</span></code></pre>
<p style="margin: 0px 0px 1em; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; clear: both; word-wrap: break-word;">The workaround is to add a dummy expression early in the page. E.g. &lt;%="" %&gt;. This will not render anything, and it will make sure that __o is declared top level in the Render method, before any potential &#8216;if&#8217; (or other scoping) statement.</p>
<p style="margin: 0px 0px 1em; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; clear: both; word-wrap: break-word;">[/quote]</p>
<p style="margin: 0px 0px 1em; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; clear: both; word-wrap: break-word;">An alternative solution is to simply use</p>
<p style="margin: 0px 0px 1em; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; clear: both; word-wrap: break-word;"><span class="Apple-style-span" style="border-collapse: separate; color: #000000; font-family: Simsun; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 13px; line-height: 12px; text-align: left;">
<div class="post-text" style="margin: 0px 5px 5px 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; width: 660px; line-height: 18px;">
<pre class="default prettyprint" style="margin: 0px 0px 10px; padding: 5px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: #eeeeee; font-family: Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif; overflow: auto; width: auto; max-height: 600px;"><code style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: #eeeeee; font-family: Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;"><span class="pun" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">&lt;%</span><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;"> response</span><span class="pun" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">.</span><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">write</span><span class="pun" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">(</span><span class="kwd" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #00008b;">var</span><span class="pun" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">)</span><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;"> %&gt;<br />
</span></code></pre>
<p style="margin: 0px 0px 1em; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; clear: both; word-wrap: break-word;">instead of</p>
<pre class="default prettyprint" style="margin: 0px 0px 10px; padding: 5px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: #eeeeee; font-family: Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif; overflow: auto; width: auto; max-height: 600px;"><code style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: #eeeeee; font-family: Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;"><span class="pun" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;">&lt;%=</span><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;"> </span><span class="kwd" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #00008b;">var</span><span class="pln" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #000000;"> %&gt;<br />
</span></code></pre>
</div>
<table class="fw" style="margin: 0px; padding: 0px; font-size: 13px; vertical-align: baseline; background-color: transparent; border-collapse: collapse; width: 665px;">
    <tbody style="margin: 0px; padding: 0px; border-width: 0px; font-size: 13px; vertical-align: baseline; background-color: transparent;">
        <tr style="margin: 0px; padding: 0px; border-width: 0px; font-size: 13px; vertical-align: baseline; background-color: transparent;">
            <td class="vt" style="margin: 0px; padding: 0px; font-size: 13px; vertical-align: top; background-color: transparent;">
            <div class="post-menu" style="margin: 0px; padding: 2px 0px 0px; border-width: 0px; font-size: 13px; vertical-align: baseline; background-color: transparent;"><a href="http://stackoverflow.com/questions/750902/how-do-i-get-rid-of-o-is-not-declared/751028#751028" title="permalink to this answer" style="margin: 0px; padding: 0px 3px 2px; border-width: 0px; font-size: 13px; vertical-align: baseline; background-color: transparent; color: #888888; text-decoration: none; cursor: pointer;">link</a><span class="lsep" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #cccccc;">|</span><a href="http://stackoverflow.com/posts/751028/edit" title="edit this post" style="margin: 0px; padding: 0px 3px 2px; border-width: 0px; font-size: 13px; vertical-align: baseline; background-color: transparent; color: #888888; text-decoration: none; cursor: pointer;">edit</a><span class="lsep" style="margin: 0px; padding: 0px; border-width: 0px; font-size: 14px; vertical-align: baseline; background-color: transparent; color: #cccccc;">|</span></div>
            </td>
        </tr>
    </tbody>
</table>
</span></span></p>
</span></span>
<img src ="http://www.blogjava.net/unilobster/aggbug/346408.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/unilobster/" target="_blank">游雯</a> 2011-03-16 16:16 <a href="http://www.blogjava.net/unilobster/articles/346408.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>