<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/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Volta</title>
        <link>http://geekswithblogs.net/Saqib/category/7523.aspx</link>
        <description>Volta</description>
        <language>en</language>
        <copyright>Tanzim Saqib</copyright>
        <managingEditor>me@tanzimsaqib.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Write your own DOM friendly extension methods for HtmlElement in Volta</title>
            <link>http://geekswithblogs.net/Saqib/archive/2008/01/29/write-your-own-dom-friendly-extension-methods-for-htmlelement-in.aspx</link>
            <description>&lt;p&gt;I know there are &lt;strong&gt;GetById&lt;/strong&gt;, &lt;strong&gt;GetById&amp;lt;&amp;gt;&lt;/strong&gt; methods in Document object. But, I often miss a method that I feel should be in Volta, which iterates through its child nodes and find an element for me. Let us say, there is a HTML like the following:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;="divContainer"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;b&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Some text&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;b&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;="firstDiv"&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;i&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Some more text&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;i&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;="secondDiv"&amp;gt;
        &lt;/span&gt;Okay, I gotta go now
    &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div &lt;/span&gt;&lt;span style="color: red"&gt;anyAttribute&lt;/span&gt;&lt;span style="color: blue"&gt;="anyValue"&amp;gt;
        &lt;/span&gt;Babye
    &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;The most important thing is, I can not get the last div by Document.&lt;strong&gt;GetById&lt;/strong&gt;, because instead of id I chose &lt;strong&gt;anyAttribute&lt;/strong&gt;. So, I wrote my own extension method which can run into not only Div but also any &lt;strong&gt;HtmlElement&lt;/strong&gt;, and can find me the desired &lt;strong&gt;HtmlElement&lt;/strong&gt; inside the prior one with the &lt;strong&gt;anyAttribute&lt;/strong&gt; and &lt;strong&gt;anyValue&lt;/strong&gt;. To make my intention clear, I'd like to show how I'd like to use that extension method: &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;divContainer = Document.GetById&amp;lt;&lt;span style="color: #2b91af"&gt;Div&lt;/span&gt;&amp;gt;(&lt;span style="color: #a31515"&gt;"divContainer"&lt;/span&gt;);
&lt;span style="color: blue"&gt;var &lt;/span&gt;anyDiv = divContainer.Find&amp;lt;&lt;span style="color: #2b91af"&gt;Div&lt;/span&gt;&amp;gt;(&lt;span style="color: #a31515"&gt;"anyAttribute"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"anyValue"&lt;/span&gt;);

&lt;span style="color: blue"&gt;if&lt;/span&gt;(anyDiv != &lt;span style="color: blue"&gt;null&lt;/span&gt;)
    anyDiv.InnerHtml += &lt;span style="color: #a31515"&gt;"guys!"&lt;/span&gt;;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;So, I'd like to call my extension method &lt;strong&gt;Find&amp;lt;&amp;gt;&lt;/strong&gt; which will take the type I'm looking for (in this case a Div) and that &lt;strong&gt;HtmlElement&lt;/strong&gt; should have an attribute "&lt;strong&gt;anyAttribute&lt;/strong&gt;" that contains "&lt;strong&gt;anyValue&lt;/strong&gt;". Here is how I make up the extension method: &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public static class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;HtmlExtensions
&lt;/span&gt;{
    &lt;span style="color: blue"&gt;public static &lt;/span&gt;T Find&amp;lt;T&amp;gt;(&lt;span style="color: blue"&gt;this &lt;/span&gt;T parent, &lt;span style="color: blue"&gt;string &lt;/span&gt;attribute, &lt;span style="color: blue"&gt;string &lt;/span&gt;value)
        &lt;span style="color: blue"&gt;where &lt;/span&gt;T : &lt;span style="color: #2b91af"&gt;HtmlElement
    &lt;/span&gt;{
        &lt;span style="color: blue"&gt;var &lt;/span&gt;element = parent.FirstChild; 

        &lt;span style="color: blue"&gt;while&lt;/span&gt;(element != &lt;span style="color: blue"&gt;null&lt;/span&gt;)
            &lt;span style="color: blue"&gt;if &lt;/span&gt;(element.IsProper&amp;lt;T&amp;gt;(attribute, value))
                &lt;span style="color: blue"&gt;return &lt;/span&gt;element &lt;span style="color: blue"&gt;as &lt;/span&gt;T;
            &lt;span style="color: blue"&gt;else
                &lt;/span&gt;element = element.NextSibling; 

        &lt;span style="color: blue"&gt;return null&lt;/span&gt;;
    }

    &lt;span style="color: blue"&gt;public static bool &lt;/span&gt;IsProper&amp;lt;T&amp;gt;(&lt;span style="color: blue"&gt;this &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DomNode &lt;/span&gt;element, &lt;span style="color: blue"&gt;string &lt;/span&gt;attribute, &lt;span style="color: blue"&gt;string &lt;/span&gt;value)
        &lt;span style="color: blue"&gt;where &lt;/span&gt;T : &lt;span style="color: #2b91af"&gt;HtmlElement
    &lt;/span&gt;{
        &lt;span style="color: blue"&gt;if &lt;/span&gt;(element.GetType() == &lt;span style="color: blue"&gt;typeof&lt;/span&gt;(T) &amp;amp;&amp;amp;
            element.Attributes != &lt;span style="color: blue"&gt;null &lt;/span&gt;&amp;amp;&amp;amp;
            element.Attributes.GetNamedItem(attribute) != &lt;span style="color: blue"&gt;null &lt;/span&gt;&amp;amp;&amp;amp;
            element.Attributes.GetNamedItem(attribute).Value == value)

            &lt;span style="color: blue"&gt;return true&lt;/span&gt;;

        &lt;span style="color: blue"&gt;return false&lt;/span&gt;;
    }
}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;This method can iterate only one depth. Multi depth implementation can be done by running a simple DFS which is left to you guys. Note one thing, I have called one extension method "&lt;strong&gt;IsProper&lt;/strong&gt;" inside another extension method, and there is no harm in it. So, this is how you can add your own extension methods to the &lt;strong&gt;HtmlElement&lt;/strong&gt;.&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119172"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119172" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Saqib/aggbug/119172.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tanzim Saqib</dc:creator>
            <guid>http://geekswithblogs.net/Saqib/archive/2008/01/29/write-your-own-dom-friendly-extension-methods-for-htmlelement-in.aspx</guid>
            <pubDate>Tue, 29 Jan 2008 00:39:47 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Saqib/comments/119172.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Saqib/archive/2008/01/29/write-your-own-dom-friendly-extension-methods-for-htmlelement-in.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Saqib/comments/commentRss/119172.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Saqib/services/trackbacks/119172.aspx</trackback:ping>
        </item>
        <item>
            <title>Appearing on Microsoft Volta team blog</title>
            <link>http://geekswithblogs.net/Saqib/archive/2008/01/27/appearing-on-microsoft-volta-team-blog.aspx</link>
            <description>&lt;p&gt;Microsoft Volta team blogged about me and one of my articles: &lt;a href="http://labs.live.com/volta/blog/Volta+How+To+Flickr+Widget.aspx" target="_blank"&gt;http://labs.live.com/volta/blog/Volta+How+To+Flickr+Widget.aspx&lt;/a&gt;  &lt;/p&gt;&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/Saqib/WindowsLiveWriter/AppearingonMicrosoftVoltateamblog_37C4/VoltaTeamBlog_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="193" alt="VoltaTeamBlog" src="http://geekswithblogs.net/images/geekswithblogs_net/Saqib/WindowsLiveWriter/AppearingonMicrosoftVoltateamblog_37C4/VoltaTeamBlog_thumb.png" width="563" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118950"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118950" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Saqib/aggbug/118950.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tanzim Saqib</dc:creator>
            <guid>http://geekswithblogs.net/Saqib/archive/2008/01/27/appearing-on-microsoft-volta-team-blog.aspx</guid>
            <pubDate>Sat, 26 Jan 2008 22:00:40 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Saqib/comments/118950.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Saqib/archive/2008/01/27/appearing-on-microsoft-volta-team-blog.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Saqib/comments/commentRss/118950.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Saqib/services/trackbacks/118950.aspx</trackback:ping>
        </item>
        <item>
            <title>HttpRequestFactory vs. XMLHttpRequest in Volta</title>
            <link>http://geekswithblogs.net/Saqib/archive/2008/01/25/httprequestfactory-vs.-xmlhttprequest-in-volta.aspx</link>
            <description>&lt;p&gt;HttpRequestFactory was designed for use by tiersplitting internally and was not supposed to be exposed as part of the Volta API as Danny van Velzen from Microsoft Volta team told me today. So, its better if you use XMLHttpRequest instead because this factory class might not show up in the later releases. You will find this class in Microsoft.LiveLabs.Volta.Xml namespace.  As like as JavaScript's one, in this .NET version you can also Open URL, specify method name, and of course pass credentials. You can track response text, xml, status code, status text and also you can abort. &lt;/p&gt; &lt;p&gt;To retrieve your content, you must subscribe to ReadyStateChange event with a HtmlEventHandler which you can find in Microsoft.LiveLabs.Volta.Html namespace and check the status code. If it is 200 that means "HTTP OK", you can take the ResponseText or ResponseXML. See this example:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;content = &lt;span style="color: blue"&gt;string&lt;/span&gt;.Empty;
&lt;span style="color: blue"&gt;var &lt;/span&gt;request = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;XMLHttpRequest&lt;/span&gt;();

request.ReadyStateChange += &lt;span style="color: blue"&gt;delegate&lt;/span&gt;()
{
    &lt;span style="color: blue"&gt;if &lt;/span&gt;(request.Status == 200)
        content = request1.ResponseText;
};

request.Open(&lt;span style="color: #a31515"&gt;"POST"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"http://tanzimsaqib.com/feed/"&lt;/span&gt;, &lt;span style="color: blue"&gt;true&lt;/span&gt;);&lt;/pre&gt;However, you cannot fetch cross domain content by XMLHttpRequest. The Volta compiler creates client side JavaScript XMLHttpRequest and lets developers write code in .NET friendly way. So, I do not think there is any way to retrieve cross domain content in Volta, and leaving us on the same old HttpRequest class.&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118909"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118909" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Saqib/aggbug/118909.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tanzim Saqib</dc:creator>
            <guid>http://geekswithblogs.net/Saqib/archive/2008/01/25/httprequestfactory-vs.-xmlhttprequest-in-volta.aspx</guid>
            <pubDate>Fri, 25 Jan 2008 17:12:59 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Saqib/comments/118909.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Saqib/archive/2008/01/25/httprequestfactory-vs.-xmlhttprequest-in-volta.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Saqib/comments/commentRss/118909.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Saqib/services/trackbacks/118909.aspx</trackback:ping>
        </item>
        <item>
            <title>[New Article] Building a Volta Control : A Flickr Widget</title>
            <link>http://geekswithblogs.net/Saqib/archive/2008/01/18/new-article-building-a-volta-control--a-flickr-widget.aspx</link>
            <description>&lt;p&gt;This is my first article which is based on the first CTP of Volta considering its current limitations. You will see how you can create a Volta control that the compiler can convert into an AJAX Widget without requiring us writing a single line of JavaScript code: &lt;a title="http://dotnetslackers.com/articles/aspnet/BuildingAVoltaControlAFlickrWidget.aspx" href="http://dotnetslackers.com/articles/aspnet/BuildingAVoltaControlAFlickrWidget.aspx"&gt;http://dotnetslackers.com/articles/aspnet/BuildingAVoltaControlAFlickrWidget.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118671"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118671" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Saqib/aggbug/118671.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tanzim Saqib</dc:creator>
            <guid>http://geekswithblogs.net/Saqib/archive/2008/01/18/new-article-building-a-volta-control--a-flickr-widget.aspx</guid>
            <pubDate>Fri, 18 Jan 2008 15:38:12 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Saqib/comments/118671.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Saqib/archive/2008/01/18/new-article-building-a-volta-control--a-flickr-widget.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Saqib/comments/commentRss/118671.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Saqib/services/trackbacks/118671.aspx</trackback:ping>
        </item>
        <item>
            <title>Questions on my Volta Control Development article</title>
            <link>http://geekswithblogs.net/Saqib/archive/2008/01/18/questions-on-my-volta-control-development-article.aspx</link>
            <description>&lt;p&gt;Someone had questions about the &lt;a href="http://dotnetslackers.com/articles/aspnet/BuildingAVoltaControlAFlickrWidget.aspx" target="_blank"&gt;article&lt;/a&gt; recent I wrote on DotNetSlackers are: &lt;/p&gt;&lt;p&gt;“i am curious to know how you have hooked the DownloadPhotos to voltaControl1, is it hooked automatically, when added to the volta project, what is the case of using external flickr api ? Also, let me know what is the purpose of screen_name in voltaControl1.” &lt;/p&gt;&lt;p&gt;You might have the same questions, so to clarify, here are the answers: &lt;/p&gt;&lt;p&gt;Inside VoltaControl, PhotosLoaded event of FlickrHelper class is subscribed and FlickrHelper's DownloadPhotos is invoked so that as soon as the photo data is finished downloading, the subscriber (VoltaControl) is notified with the photo data, to manipulate the UI. Such events are not automatic, these are manually created inside FlickrHelper class. &lt;/p&gt;&lt;p&gt;If you'd like to use external Flickr API, you need to change the way how it works now. It's been designed to make a tiny widget with simple and least functionalities in order to demonstrate making of a Volta control. &lt;/p&gt;&lt;p&gt;screen_name is your Flickr account's screen name which is a required parameter to retrieve the "NSID" of your account which is necessary to build URLs to your photos.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118701"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118701" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Saqib/aggbug/118701.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tanzim Saqib</dc:creator>
            <guid>http://geekswithblogs.net/Saqib/archive/2008/01/18/questions-on-my-volta-control-development-article.aspx</guid>
            <pubDate>Fri, 18 Jan 2008 14:08:49 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Saqib/comments/118701.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Saqib/archive/2008/01/18/questions-on-my-volta-control-development-article.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Saqib/comments/commentRss/118701.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Saqib/services/trackbacks/118701.aspx</trackback:ping>
        </item>
        <item>
            <title>Make web.config work in Volta</title>
            <link>http://geekswithblogs.net/Saqib/archive/2008/01/08/make-web.config-work-in-volta.aspx</link>
            <description>&lt;p&gt;&lt;img src="http://labs.live.com/volta/images/logo-volta.png" /&gt; &lt;/p&gt;  &lt;p&gt;Ever wondered how to make web.config work in Volta first CTP release? Simply add a web.config file and add content to it? Unfortunately this is not the case in Volta at least in the first CTP. Five steps to get it done:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Add a web.config file &lt;/li&gt;    &lt;li&gt;Add content to simply by copying from other web.config file &lt;/li&gt;    &lt;li&gt;Right click on web.config from the Solution Explorer and then Properties &lt;/li&gt;    &lt;li&gt;Choose Build Action to Embedded Resource &lt;/li&gt;    &lt;li&gt;In your Volta Page Designer CS file, add the following line of code: &lt;/li&gt; &lt;/ol&gt;  &lt;blockquote&gt;   &lt;pre class="code"&gt;[&lt;span style="color: blue"&gt;assembly&lt;/span&gt;: &lt;span style="color: #2b91af"&gt;VoltaFile&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"web.config"&lt;/span&gt;)]&lt;/pre&gt;

  &lt;br /&gt;&lt;/blockquote&gt;

&lt;br /&gt;

&lt;br /&gt;

&lt;pre class="code"&gt; &lt;/pre&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118414"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118414" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Saqib/aggbug/118414.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tanzim Saqib</dc:creator>
            <guid>http://geekswithblogs.net/Saqib/archive/2008/01/08/make-web.config-work-in-volta.aspx</guid>
            <pubDate>Tue, 08 Jan 2008 15:24:20 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Saqib/comments/118414.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Saqib/archive/2008/01/08/make-web.config-work-in-volta.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Saqib/comments/commentRss/118414.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Saqib/services/trackbacks/118414.aspx</trackback:ping>
        </item>
        <item>
            <title>Make HTML controls discoverable in Volta Control</title>
            <link>http://geekswithblogs.net/Saqib/archive/2008/01/03/make-html-controls-discoverable-in-volta-control.aspx</link>
            <description>&lt;p&gt;&lt;img src="http://labs.live.com/volta/images/logo-volta.png" /&gt; &lt;/p&gt;  &lt;p&gt;When a Volta control is rendered, the ID attribute of the generated HTML is changed to something like _vcId_1_DivName which is inconvenient to find from code. But the ID attribute stays the same in case of Volta Page, so it is discoverable by ID like this:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: #2b91af"&gt;Div &lt;/span&gt;divContent = Document.GetById&amp;lt;&lt;span style="color: #2b91af"&gt;Div&lt;/span&gt;&amp;gt;(&lt;span style="color: #a31515"&gt;"divContent"&lt;/span&gt;);&lt;br /&gt;&lt;/pre&gt;

&lt;p&gt;However, if you add HTML controls to the control like the following, the ID is not changed during the rendering:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public &lt;/span&gt;VoltaControl1() : &lt;span style="color: blue"&gt;base&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"VoltaControl1.html"&lt;/span&gt;)
{
    InitializeComponent();

    &lt;span style="color: #2b91af"&gt;Button &lt;/span&gt;btnClick = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Button&lt;/span&gt;();
    btnClick.InnerText = &lt;span style="color: #a31515"&gt;"Click!"&lt;/span&gt;;
    btnClick.Id = &lt;span style="color: #a31515"&gt;"btnClick"&lt;/span&gt;;
    &lt;span style="color: blue"&gt;this&lt;/span&gt;.Add(btnClick);
}&lt;br /&gt;&lt;/pre&gt;

&lt;p&gt;If you don't prefer this way and seriously want to write your own HTML in the control's html page, you might find the following snippet useful. But, remember in this case you will use name attribute of the html element instead of ID.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: green"&gt;// Usage: var element = GetElementByName(Document.GetElementsByTagName("div"), "divWidget");
&lt;/span&gt;&lt;span style="color: blue"&gt;private &lt;/span&gt;&lt;span style="color: #2b91af"&gt;HtmlElement &lt;/span&gt;GetElementByName(&lt;span style="color: #2b91af"&gt;HtmlElementCollection &lt;/span&gt;elements, &lt;span style="color: blue"&gt;string &lt;/span&gt;name)
{
    &lt;span style="color: blue"&gt;foreach &lt;/span&gt;(&lt;span style="color: blue"&gt;var &lt;/span&gt;element &lt;span style="color: blue"&gt;in &lt;/span&gt;elements)
    {
        &lt;span style="color: #2b91af"&gt;DomAttribute &lt;/span&gt;nameAttribute = element.Attributes.GetNamedItem(&lt;span style="color: #a31515"&gt;"name"&lt;/span&gt;);
        &lt;span style="color: blue"&gt;if &lt;/span&gt;(nameAttribute != &lt;span style="color: blue"&gt;null&lt;/span&gt;)
            &lt;span style="color: blue"&gt;if &lt;/span&gt;(nameAttribute.Value == name)
                &lt;span style="color: blue"&gt;return &lt;/span&gt;element;
    }

    &lt;span style="color: blue"&gt;return null&lt;/span&gt;;
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118631"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118631" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Saqib/aggbug/118631.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tanzim Saqib</dc:creator>
            <guid>http://geekswithblogs.net/Saqib/archive/2008/01/03/make-html-controls-discoverable-in-volta-control.aspx</guid>
            <pubDate>Thu, 03 Jan 2008 02:12:42 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Saqib/comments/118631.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Saqib/archive/2008/01/03/make-html-controls-discoverable-in-volta-control.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Saqib/comments/commentRss/118631.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Saqib/services/trackbacks/118631.aspx</trackback:ping>
        </item>
        <item>
            <title>Making cross domain AJAX call using Volta</title>
            <link>http://geekswithblogs.net/Saqib/archive/2008/01/02/making-cross-domain-ajax-call-using-volta.aspx</link>
            <description>&lt;p&gt;&lt;img alt="" src="http://labs.live.com/volta/images/logo-volta.png" /&gt; &lt;/p&gt;
&lt;p&gt;Making a cross domain AJAX call in Volta is piece of cake. Volta compiler generates necessary client codes to make it work. Here is a snippet that can make an AJAX call to some Url and fetch data:&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="COLOR: blue"&gt;public void &lt;/span&gt;DownloadPhotos()
{
    &lt;span style="COLOR: #2b91af"&gt;IHttpRequest &lt;/span&gt;request = &lt;span style="COLOR: #2b91af"&gt;HttpRequestFactory&lt;/span&gt;.Create();
    request.AsyncSend(&lt;span style="COLOR: #a31515"&gt;"POST"&lt;/span&gt;, URL, &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;.Empty,
        &lt;span style="COLOR: blue"&gt;delegate&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;string &lt;/span&gt;response)
        {
            OnPhotosLoaded(&lt;span style="COLOR: blue"&gt;new &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;PhotosLoadedEventArgs&lt;/span&gt;(response));
        });
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Both IHttpRequest and HttpRequestFactory classes can be found in the Microsoft.LiveLabs.Volta.MultiTier namespace. AsyncSend method performs the asynchronous call and calls back the delegate defined where OnPhotosLoaded event is fired to notify the subscriber of this event that the data has just arrived.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118629"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118629" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Saqib/aggbug/118629.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tanzim Saqib</dc:creator>
            <guid>http://geekswithblogs.net/Saqib/archive/2008/01/02/making-cross-domain-ajax-call-using-volta.aspx</guid>
            <pubDate>Wed, 02 Jan 2008 00:49:15 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Saqib/comments/118629.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Saqib/archive/2008/01/02/making-cross-domain-ajax-call-using-volta.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Saqib/comments/commentRss/118629.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Saqib/services/trackbacks/118629.aspx</trackback:ping>
        </item>
    </channel>
</rss>