<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>SharePoint Technologies...from the field : AJAX</title><link>http://blogs.msdn.com/aaronsaikovski/archive/tags/AJAX/default.aspx</link><description>Tags: AJAX</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>WebPart Development - AJAX Tab control – Tab contents not displaying</title><link>http://blogs.msdn.com/aaronsaikovski/archive/2009/07/01/webpart-development-ajax-tab-control-tab-contents-not-displaying.aspx</link><pubDate>Wed, 01 Jul 2009 05:39:37 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9810262</guid><dc:creator>ASaikov</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/aaronsaikovski/comments/9810262.aspx</comments><wfw:commentRss>http://blogs.msdn.com/aaronsaikovski/commentrss.aspx?PostID=9810262</wfw:commentRss><description>&lt;p&gt;I found something very interesting the other day when playing around with the AJAX tab control in a custom WebPart. &lt;/p&gt;  &lt;p&gt;I created a WebPart that displays some data using the AJAX tabcontrol and found some interesting gotchas when working with it.&lt;/p&gt;  &lt;p&gt;Firstly I found that databinding and adding tabs to the the tab container has to be done in a specific order, otherwise no data appears.&lt;/p&gt;  &lt;p&gt;Here is the offending code:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//Tab1&lt;/span&gt;
&lt;span class="kwrd"&gt;this&lt;/span&gt;.m_Tab1Items = &lt;span class="kwrd"&gt;this&lt;/span&gt;.GetTab1Data();
&lt;span class="kwrd"&gt;this&lt;/span&gt;.m_Tab1View = &lt;span class="kwrd"&gt;new&lt;/span&gt; Repeater();
&lt;span class="kwrd"&gt;this&lt;/span&gt;.m_Tab1View.DataSource = &lt;span class="kwrd"&gt;this&lt;/span&gt;.m_Tab1Items;
&lt;span class="kwrd"&gt;this&lt;/span&gt;.m_Tab1View.DataBind(); 
&lt;span class="kwrd"&gt;this&lt;/span&gt;.tabs[0].Controls.Add(&lt;span class="kwrd"&gt;this&lt;/span&gt;.m_Tab1View);
                
&lt;span class="rem"&gt;//Tab2 &lt;/span&gt;
&lt;span class="kwrd"&gt;this&lt;/span&gt;.m_Tab2Items = &lt;span class="kwrd"&gt;this&lt;/span&gt;.GetTab2Data();
&lt;span class="kwrd"&gt;this&lt;/span&gt;.m_Tab2View = &lt;span class="kwrd"&gt;new&lt;/span&gt; Repeater();
&lt;span class="kwrd"&gt;this&lt;/span&gt;.m_Tab2View.DataSource = &lt;span class="kwrd"&gt;this&lt;/span&gt;.m_Tab2Items;
&lt;span class="kwrd"&gt;this&lt;/span&gt;.m_Tab2View.DataBind(); 
&lt;span class="kwrd"&gt;this&lt;/span&gt;.tabs[1].Controls.Add(&lt;span class="kwrd"&gt;this&lt;/span&gt;.m_Tab2View); &lt;/pre&gt;

&lt;p&gt;&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;All looks ok. &lt;/p&gt;

&lt;p&gt;But the weird thing is that no data was appearing. I viewed the source of the page and there is actual content but no data was being displayed. Very Weird!&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;After much tinkering about I changed the code to what is shown below and voila! it works.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//Tab1&lt;/span&gt;
&lt;span class="kwrd"&gt;this&lt;/span&gt;.m_Tab1Items = &lt;span class="kwrd"&gt;this&lt;/span&gt;.GetTab1Data();
&lt;span class="kwrd"&gt;this&lt;/span&gt;.m_Tab1View = &lt;span class="kwrd"&gt;new&lt;/span&gt; Repeater();
&lt;span class="kwrd"&gt;this&lt;/span&gt;.m_Tab1Items.DataSource = &lt;span class="kwrd"&gt;this&lt;/span&gt;.m_Tab1Items;
&lt;span class="kwrd"&gt;this&lt;/span&gt;.m_Tab1View.DataBind(); 

                
&lt;span class="rem"&gt;//Tab2 &lt;/span&gt;
&lt;span class="kwrd"&gt;this&lt;/span&gt;.m_Tab2Items = &lt;span class="kwrd"&gt;this&lt;/span&gt;.GetTab2Data();
&lt;span class="kwrd"&gt;this&lt;/span&gt;.m_Tab2View = &lt;span class="kwrd"&gt;new&lt;/span&gt; Repeater();
&lt;span class="kwrd"&gt;this&lt;/span&gt;.m_Tab2Items.DataSource = &lt;span class="kwrd"&gt;this&lt;/span&gt;.m_Tab2Items;
&lt;span class="kwrd"&gt;this&lt;/span&gt;.m_Tab2View.DataBind(); 


&lt;span class="rem"&gt;//add tabs&lt;/span&gt;
&lt;span class="kwrd"&gt;this&lt;/span&gt;.tabs[0].Controls.Add(&lt;span class="kwrd"&gt;this&lt;/span&gt;.m_Tab1View);
&lt;span class="kwrd"&gt;this&lt;/span&gt;.tabs[1].Controls.Add(&lt;span class="kwrd"&gt;this&lt;/span&gt;.m_Tab2View);&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;It seems that the AJAX tab control is quite particular in the way it displays data.&lt;/p&gt;

&lt;p&gt;So the order seems to be. &lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Retrieve the data &lt;/li&gt;

  &lt;li&gt;Bind the data to the DataSource of a repeater control &lt;/li&gt;

  &lt;li&gt;Add the Repeater control to the tab&lt;/li&gt;

  &lt;li&gt;Add the tab to the tab container.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Bingo!!!&lt;/p&gt;

&lt;p&gt;Hopefully this saves you hours of debugging and troubleshooting!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9810262" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/aaronsaikovski/archive/tags/MOSS/default.aspx">MOSS</category><category domain="http://blogs.msdn.com/aaronsaikovski/archive/tags/WSS/default.aspx">WSS</category><category domain="http://blogs.msdn.com/aaronsaikovski/archive/tags/AJAX/default.aspx">AJAX</category></item></channel></rss>