<?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>Mike Harder's Blog</title><link>http://blogs.msdn.com/mharder/default.aspx</link><description>ASP.NET and Random Programming Topics</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>WebParts and ASP.NET AJAX 1.0</title><link>http://blogs.msdn.com/mharder/archive/2007/01/23/webparts-and-asp-net-ajax-1-0.aspx</link><pubDate>Wed, 24 Jan 2007 01:12:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1516909</guid><dc:creator>mharder</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/mharder/comments/1516909.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mharder/commentrss.aspx?PostID=1516909</wfw:commentRss><description>&lt;P&gt;A lot of people ask how to use &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/hhy9ewf1.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/hhy9ewf1.aspx"&gt;WebParts&lt;/A&gt; with &lt;A class="" href="http://ajax.asp.net/" target=_blank mce_href="http://ajax.asp.net/"&gt;ASP.NET AJAX 1.0&lt;/A&gt;.&amp;nbsp; There are three different WebParts features:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Cross-browser drag and drop. 
&lt;LI&gt;Modify WebParts page (drag and drop, minimize, restore, close, add, delete) without postback. 
&lt;LI&gt;Update contents of WebPart without postback.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Cross-browser drag and drop is enabled by using the WebParts controls in the AJAX&amp;nbsp;Futures CTP.&lt;/P&gt;
&lt;P&gt;Modifying a&amp;nbsp;WebParts&amp;nbsp;page without postback&amp;nbsp;is implemented by wrapping the WebPartManager and WebPartZones in an UpdatePanel.&amp;nbsp; This was partially working in the July CTP, but it &lt;STRONG&gt;does not work&lt;/STRONG&gt; and is not supported in ASP.NET AJAX 1.0.&amp;nbsp; It&amp;nbsp;may be supported in Orcas.&lt;BR&gt;&lt;BR&gt;Updating the contents of a WebPart without postback&amp;nbsp;is implemented by placing an UpdatePanel inside a WebPart.&amp;nbsp; This is supported in the core ASP.NET AJAX Extensions 1.0.&amp;nbsp; It should work with either the ASP.NET 2.0 WebParts controls, or the AJAX Futures CTP versions of the WebParts controls.&lt;/P&gt;
&lt;P&gt;Hope this helps.&amp;nbsp; I've also posted this to the ASP.NET Forums: &lt;A href="http://forums.asp.net/thread/1545256.aspx"&gt;http://forums.asp.net/thread/1545256.aspx&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1516909" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mharder/archive/tags/ASP.NET+WebParts/default.aspx">ASP.NET WebParts</category><category domain="http://blogs.msdn.com/mharder/archive/tags/ASP.NET+AJAX/default.aspx">ASP.NET AJAX</category></item><item><title>ASP.NET AJAX: ScriptControl change from Beta2 to RC - ScriptManager.RegisterScriptDescriptors()</title><link>http://blogs.msdn.com/mharder/archive/2006/12/20/scriptcontrol-change-from-beta2-to-rc-scriptmanager-registerscriptdescriptors.aspx</link><pubDate>Wed, 20 Dec 2006 03:42:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1327691</guid><dc:creator>mharder</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mharder/comments/1327691.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mharder/commentrss.aspx?PostID=1327691</wfw:commentRss><description>&lt;p&gt;There has been some confusion about a change&amp;nbsp;made to ScriptControls&amp;nbsp;between 
the &lt;a href="http://ajax.asp.net" target="_blank" mce_href="http://ajax.asp.net"&gt;ASP.NET AJAX&lt;/a&gt; Beta2 and RC.&amp;nbsp; In Beta2, the only requirement for controls implementing 
IScriptControl or IExtenderControl was to call 
ScriptManager.RegisterScriptControl() or ScriptManager.RegisterExtenderControl() 
from their PreRender() method.&amp;nbsp; In RC, there is an additional requirement to 
call ScriptManager.RegisterScriptDescriptors() from the Render() method.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Beta2&lt;br&gt;&lt;/b&gt;&lt;font color="#0000ff" size="2"&gt;public&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;class&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#008080" size="2"&gt;MyScriptControl&lt;/font&gt;&lt;font size="2"&gt; : &lt;/font&gt;&lt;font color="#008080" size="2"&gt;Control&lt;/font&gt;&lt;font size="2"&gt;, &lt;/font&gt;&lt;font color="#008080" size="2"&gt;IScriptControl&lt;/font&gt;&lt;font size="2"&gt; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;protected&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;override&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;void&lt;/font&gt;&lt;font size="2"&gt; OnPreRender(&lt;/font&gt;&lt;font color="#008080" size="2"&gt;EventArgs&lt;/font&gt;&lt;font size="2"&gt; e) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;base&lt;/font&gt;&lt;font size="2"&gt;.OnPreRender(e);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#008080" size="2"&gt;ScriptManager&lt;/font&gt;&lt;font size="2"&gt;.GetCurrent(Page).RegisterScriptControl(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;this&lt;/font&gt;&lt;font size="2"&gt;);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;/font&gt;&lt;font size="2"&gt;}&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;RC&lt;br&gt;&lt;/b&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;font size="2"&gt; 
&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;class&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#008080" size="2"&gt;MyScriptControl&lt;/font&gt;&lt;font size="2"&gt; : &lt;/font&gt;&lt;font color="#008080" size="2"&gt;Control&lt;/font&gt;&lt;font size="2"&gt;, &lt;/font&gt;&lt;font color="#008080" size="2"&gt;IScriptControl&lt;/font&gt;&lt;font size="2"&gt; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;protected&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;override&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;void&lt;/font&gt;&lt;font size="2"&gt; OnPreRender(&lt;/font&gt;&lt;font color="#008080" size="2"&gt;EventArgs&lt;/font&gt;&lt;font size="2"&gt; e) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;base&lt;/font&gt;&lt;font size="2"&gt;.OnPreRender(e);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#008080" size="2"&gt;ScriptManager&lt;/font&gt;&lt;font size="2"&gt;.GetCurrent(Page).RegisterScriptControl(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;this&lt;/font&gt;&lt;font size="2"&gt;);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;protected&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;override&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;void&lt;/font&gt;&lt;font size="2"&gt; Render(&lt;/font&gt;&lt;font color="#008080" size="2"&gt;HtmlTextWriter&lt;/font&gt;&lt;font size="2"&gt; writer) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;base&lt;/font&gt;&lt;font size="2"&gt;.Render(writer);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;/font&gt;&lt;font color="#008080" size="2"&gt;ScriptManager&lt;/font&gt;&lt;font size="2"&gt;.GetCurrent(Page).RegisterScriptDescriptors(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;this&lt;/font&gt;&lt;font size="2"&gt;);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;In the RC, we added this to the ExtenderControl base class, so this change 
doesn't affect controls deriving from ExtenderControl.&amp;nbsp; It only affects controls 
directly implementing IScriptControl and IExtenderControl.&amp;nbsp; This change 
is&amp;nbsp;mentioned&amp;nbsp;several times&amp;nbsp;in the &lt;a href="http://ajax.asp.net/files/AspNet_AJAX_CTP_to_RC_Whitepaper.aspx" mce_href="http://ajax.asp.net/files/AspNet_AJAX_CTP_to_RC_Whitepaper.aspx" class="" target="_blank"&gt;&lt;font color="#7395c1"&gt;ASP.NET AJAX CTP to RC 
whitepaper&lt;/font&gt;&lt;/a&gt;&amp;nbsp;(search for "RegisterScriptDescriptors").&amp;nbsp; The rest of 
this post explains the rationale behind this change.&lt;/p&gt;
&lt;p&gt;We needed to make this change&amp;nbsp;because there are some scenarios where a 
control's PreRender() method is called but its Render() method is not.&amp;nbsp; One 
example is a control inside a closed WebPart.&amp;nbsp; In Beta2, ScriptControls did not 
work inside closed WebParts.&amp;nbsp; The ScriptDescriptors would be registered, but the 
control would never render any HTML, which causes a JavaScript error when we try 
to find the associated HTML element.&lt;/p&gt;
&lt;p&gt;To fix this issue, we needed to somehow verify that a ScriptControl was 
rendered before registering its ScriptDescriptors.&amp;nbsp; Unfortunately, there is no 
way to externally determine whether a control has been rendered, so the only 
solution was to require the ScriptControl to call into the ScriptManager from 
its Render() method.&amp;nbsp; We realize this extra call to RegisterScriptDescriptors() 
is annoying, but it was the only to fix the bug, and the&amp;nbsp;change only affects 
controls directly implementing IScriptControl or IExtenderControl.&amp;nbsp;&amp;nbsp;As a result, 
we&amp;nbsp;added the ScriptControl base class in RC, which makes it easier to write a 
basic ScriptControl without directly implementing the IScriptControl 
interface.&lt;/p&gt;
&lt;p&gt;The new model is also more correct from a purist's standpoint.&amp;nbsp; A control's 
script library is registered via&amp;nbsp;its ScriptReferences, and it is safe to 
register these even if the control is never rendered.&amp;nbsp; To maximize flexibility 
in rendering these script libraries, the ScriptReferences must be registered 
during the PreRender phase.&amp;nbsp;&amp;nbsp;A control's instance script is registered via its 
ScriptDescriptors, and it is not safe to register these if the control is never 
rendered.&amp;nbsp; So, the instance script must be registered during the control's 
Render phase.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1327691" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mharder/archive/tags/ASP.NET+AJAX/default.aspx">ASP.NET AJAX</category></item><item><title>PDC 2005 Slides and Code</title><link>http://blogs.msdn.com/mharder/archive/2006/12/11/pdc-2005-slides-and-code.aspx</link><pubDate>Tue, 12 Dec 2006 01:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1262342</guid><dc:creator>mharder</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mharder/comments/1262342.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mharder/commentrss.aspx?PostID=1262342</wfw:commentRss><description>&lt;p&gt;Back in September 2005 at &lt;a href="http://msdn.microsoft.com/events/pdc/" title="Microsoft PDC" mce_href="http://msdn.microsoft.com/events/pdc/"&gt;PDC&lt;/a&gt;, I gave a talk with Andres Sanabria titled &lt;b&gt;PRS418: Developing Portal UI With Web Parts&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;&lt;br&gt;There are five separate demos:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;ExternalWebParts: &lt;/b&gt;The WebParts and Connections for a page are stored in an external XML file, instead of the page itself.&amp;nbsp; Shows how to decouple the WebPart definitions from the page.&amp;nbsp; Illustrates the different phases of the WebParts life cycle.&lt;/li&gt;&lt;li&gt;&lt;b&gt;ContentManagement:&lt;/b&gt; Customizes WebPart Personalization to implement a content management application.&amp;nbsp; Multiple versions of the personalization data are stored for each page and loaded dynamically.&amp;nbsp; Illustrates how to extend WebParts Personalization.&lt;/li&gt;&lt;li&gt;&lt;b&gt;SecondaryIntefaces:&lt;/b&gt; Uses the "SecondaryInterfaces" feature of WebParts connections to implement a basic interface yet provide richer data on a second interface.&lt;/li&gt;&lt;li&gt;&lt;b&gt;SecureImportExport: &lt;/b&gt;Uses a custom WebPartManager to encrypt the sensitive data in an exported .WebPart file.&amp;nbsp; The data can not be view or modified by the end user, and can only be decrypted by the web server that encrypted it.&amp;nbsp; Illustrates how to extend the import/export process.&lt;/li&gt;&lt;li&gt;&lt;b&gt;WebPartsAdmin: &lt;/b&gt;Allows management of Personalization data via an external page.&amp;nbsp; Implemented by executing the target page in a child request.&amp;nbsp; Illustrates how to modify the personalization data on another page.&lt;/li&gt;&lt;/ol&gt;&amp;nbsp; The slides and code are available &lt;a href="http://blogs.msdn.com/mharder/attachment/1262342.ashx" title="PDC 2005 Slides and Code" mce_href="http://blogs.msdn.com/mharder/attachment/1262342.ashx"&gt;here&lt;/a&gt;.&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1262342" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/mharder/attachment/1262342.ashx" length="292324" type="application/zip" /><category domain="http://blogs.msdn.com/mharder/archive/tags/ASP.NET+WebParts/default.aspx">ASP.NET WebParts</category></item><item><title>ASP.NET Connections 2006 Slides and Code</title><link>http://blogs.msdn.com/mharder/archive/2006/11/16/asp-net-connections-2006-slides-and-code.aspx</link><pubDate>Fri, 17 Nov 2006 01:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1089411</guid><dc:creator>mharder</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mharder/comments/1089411.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mharder/commentrss.aspx?PostID=1089411</wfw:commentRss><description>Last week, I was in Las Vegas attending the &lt;a href="http://www.devconnections.com/shows/aspfall2006/default.asp?s=82" title="ASP.NET Connections 2006" mce_href="http://www.devconnections.com/shows/aspfall2006/default.asp?s=82"&gt;ASP.NET Connections 2006&lt;/a&gt; conference.&amp;nbsp; I gave a talk with Mir Tariq titled &lt;b&gt;AMS306:&amp;nbsp;Developing Rich Web Applications with ASP.NET “Atlas”.&amp;nbsp;&lt;/b&gt;The slides and code are available &lt;a href="http://blogs.msdn.com/mharder/attachment/1089411.ashx" title="AMS306 Developing Rich Web Applications with ASP.NET AJAX" mce_href="http://blogs.msdn.com/mharder/attachment/1089411.ashx"&gt;here&lt;/a&gt;.&lt;br&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1089411" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/mharder/attachment/1089411.ashx" length="831995" type="application/zip" /><category domain="http://blogs.msdn.com/mharder/archive/tags/ASP.NET+AJAX/default.aspx">ASP.NET AJAX</category></item></channel></rss>