<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Josh Gough </title><link>http://www.dotnetjunkies.com/WebLog/joshuagough/default.aspx</link><description /><dc:language>en-US</dc:language><generator>CommunityServer 1.0 (Build: 1.0.1.50214)</generator><item><title>MCAD Certified Finally</title><link>http://www.dotnetjunkies.com/WebLog/joshuagough/archive/2007/04/16/226094.aspx</link><pubDate>Mon, 16 Apr 2007 04:57:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:226094</guid><dc:creator>JoshuaGough</dc:creator><slash:comments>0</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/joshuagough/comments/226094.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/joshuagough/commentrss.aspx?PostID=226094</wfw:commentRss><description>Now that everybody is getting .NET 2.0 Certifications, I'm finally MCAD-certified. I passed 70-320 today with a score of 920. Now I'm not sure what the actual upgrade path to MCPD: EAD is based on Microsoft's documentation. &lt;br&gt;&lt;br&gt;This page says I can take just two exams, 70-529 and 70-549 in order to achieve MCPD: EAD certification:&lt;br&gt;&lt;br&gt;
&lt;a href="http://www.microsoft.com/learning/mcp/upgrade/vs2005/default.mspx"&gt;http://www.microsoft.com/learning/mcp/upgrade/vs2005/default.mspx&lt;/a&gt;&lt;br&gt;&lt;br&gt;However, other pages make it look like I need to take four, including those two, plus two other upgrade exams. &lt;br&gt;&lt;br&gt;Does anyone know the real deal?&lt;br&gt;&lt;br&gt;Thanks,&lt;br&gt;Josh&lt;br&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=226094" width="1" height="1"&gt;</description></item><item><title>Atlanta Cutting Edge User Group Recap: AJAX.NET Beyond the UpdatePanel</title><link>http://www.dotnetjunkies.com/WebLog/joshuagough/archive/2007/03/06/208643.aspx</link><pubDate>Tue, 06 Mar 2007 18:11:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:208643</guid><dc:creator>JoshuaGough</dc:creator><slash:comments>0</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/joshuagough/comments/208643.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/joshuagough/commentrss.aspx?PostID=208643</wfw:commentRss><description>&lt;H2&gt;&lt;B&gt;&lt;I&gt;&lt;FONT&gt;&lt;SPAN&gt;Atlanta Cutting Edge User Group Meeting&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/I&gt;&lt;/B&gt;&lt;/H2&gt;
&lt;P&gt;&lt;FONT&gt;&lt;SPAN&gt;The March 5 Atlanta Cutting Edge user group (&lt;A&gt;http://www.atlantace.com/&lt;/A&gt;) meeting was about Microsoft’s AJAX.NET Library.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT&gt;&lt;SPAN&gt;The presenter was Eric Engler. His slides are available here: &lt;A&gt;http://www.ericengler.com/downloads/AJAX-BeyondUpdatePanel.zip&lt;/A&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;&lt;SPAN&gt;The rest of his presentations are available at: &lt;A&gt;http://www.ericengler.com/Presentations.aspx&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;H2&gt;&lt;B&gt;&lt;I&gt;&lt;FONT&gt;&lt;SPAN&gt;Technical Highlights from the Presentation&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/I&gt;&lt;/B&gt;&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;FONT&gt;&lt;SPAN&gt;Described the AJAX.NET JS library as a “mini” CLR implemented in JS&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;FONT&gt;&lt;SPAN&gt;Strongly recommended to turn off DEBUG=”true” when you deploy&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;FONT&gt;&lt;SPAN&gt;AJAX.NET supports namespaces, classes, and interfaces&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;FONT&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT&gt;&lt;SPAN&gt;Explained that the support for Interfaces in JS adds overhead, but the JS client-side miniCLR does not enforce interface type checking unless DEBUG=TRUE, hence the reason you want to do all your debugging with it turned on, and then turn it off when you deploy.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;FONT&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT&gt;&lt;SPAN&gt;Mentioned WPF/E as a possible successor / competitor to AJAX.NET&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;FONT&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT&gt;&lt;SPAN&gt;&lt;A&gt;http://msdn2.microsoft.com/en-us/asp.net/bb187358.aspx&lt;/A&gt; &amp;nbsp;-- This looks like it is geared toward very highly interactive rich media clients, in the spirit of Flash-based technologies like FLEX and OpenLaszlo&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;FONT&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT&gt;&lt;SPAN&gt;Rounded Corners Extender from AJAX Toolkit: See this video demonstrating this control extender: &lt;A&gt;http://www.asp.net/learn/videos/view.aspx?tabid=63&amp;amp;id=98&lt;/A&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;B&gt;&lt;I&gt;&lt;FONT&gt;&lt;SPAN&gt;Adoption Assessment&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/I&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;&lt;SPAN&gt;Microsoft has released AJAX.NET as a v1.0 product, meaning it offers support for this product. To download or learn more about it visit:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;&lt;SPAN&gt;&lt;A&gt;http://ajax.asp.net/&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;&lt;SPAN&gt;With its 1.0 status, I think it’s definitely worth evaluating for adoption in actual projects.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;H2&gt;&lt;B&gt;&lt;I&gt;&lt;FONT&gt;&lt;SPAN&gt;Videos, Demos, and Resources for Learning More&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/I&gt;&lt;/B&gt;&lt;/H2&gt;
&lt;P&gt;&lt;FONT&gt;&lt;SPAN&gt;MS has done a great job providing demo videos about AJAX.NET on this site:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;&lt;SPAN&gt;&lt;A&gt;http://www.asp.net/learn/videos/default.aspx?tabid=63#ajax&lt;/A&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;&lt;SPAN&gt;See the rounded corner demo and many others on this page. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;H2&gt;&lt;B&gt;&lt;I&gt;&lt;FONT&gt;&lt;SPAN&gt;Debugging Options and Unit Testing JavaScript&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/I&gt;&lt;/B&gt;&lt;/H2&gt;
&lt;P&gt;&lt;FONT&gt;&lt;SPAN&gt;Some questions were raised about debuggability of AJAX. Questions about how to test in FireFox came up. There are several well known and robust tools for debugging in FireFox:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;FONT&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT&gt;&lt;SPAN&gt;FireBug: &lt;A&gt;https://addons.mozilla.org/firefox/1843/&lt;/A&gt; excellent debugger&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;FONT&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT&gt;&lt;SPAN&gt;Venkman: &lt;A&gt;http://www.mozilla.org/projects/venkman/&lt;/A&gt; another great debugger extension&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;FONT&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT&gt;&lt;SPAN&gt;Web Developer Toolbar: &lt;A&gt;http://chrispederick.com/work/webdeveloper/documentation/&lt;/A&gt; &amp;nbsp;IE may have one of these now too, but it still doesn’t compare to this original from Chris Pederick.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;FONT&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT&gt;&lt;SPAN&gt;JSUnit: &lt;A&gt;http://jsunit.net/&lt;/A&gt; A port of JUnit to JS for running test cases inside the web browser.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=208643" width="1" height="1"&gt;</description></item><item><title>The Atlanta .NET User Group Meeting Summary</title><link>http://www.dotnetjunkies.com/WebLog/joshuagough/archive/2007/02/26/202841.aspx</link><pubDate>Tue, 27 Feb 2007 04:58:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:202841</guid><dc:creator>JoshuaGough</dc:creator><slash:comments>0</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/joshuagough/comments/202841.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/joshuagough/commentrss.aspx?PostID=202841</wfw:commentRss><description>The Atlanta .NET User Group meeting was pretty good tonight. Aside from the technical details, I also saw a number of old faces there I had not see in a while. I really need to go to more of these meetings. I always learn so much just by attending and seeing what people are doing.

&lt;br&gt;&lt;br&gt;Matt Ranlett, of DevCow fame was there. Matt is always working with the Atlanta MS Professionals group and is working with Sharepoint. See his Sharepoint 123 series at http://www.atlantamspros.com/Events/SharePoint123/tabid/76/Default.aspx&lt;br&gt;&lt;br&gt;Matt was there along side Keith Rome, who now runs the Atlanta Cuttige Edge group, which is the "resurrection of the Atlanta C# group" according to http://www.atlantace.org. Keith is an extremely well accomplished .NET consultant who maintains a blog at: http://www.mindfusioncorp.com/weblog/&lt;br&gt;&lt;br&gt;Anyway, about tonight's meeting: you can see the agenda here: http://www.atlantadotnet.org/

The first part was about robotics and .NET, including a demo of a remote controlled car. That was pretty cool.

&lt;br&gt;&lt;br&gt;Closer to home though was Eric Engler's presentation about .NET 2.0 Architecture.

At the 1,000 foot level he covered two main approaches to application architecture:

&lt;br&gt;&lt;br&gt;&lt;span&gt;n-Tier model and ORM model.

&lt;/span&gt;&lt;br&gt;&lt;br&gt;He presented slides that illustrated the pros and cons of these models, though to me there is not a complete distiction these days. There tends to be a hybrid approach in many cases. &lt;br&gt;&lt;br&gt;In his definition, n-Tier involved a full BLL and DAL that worked together top to bottom, while he classified the ORM model as involving database layer mediation/obfuscation through mapping files and automatic SQL generation at run time.

&lt;br&gt;&lt;br&gt;He said in his experience n-tier was better for larger scale applications spanning multiple databases and systems, but took longer up front to implement, while ORM was quicker to get up and running and could be good for turning out systems quickly, but could become too dependent upon specialized knowledge in the long run to be maintainable.

&lt;br&gt;&lt;br&gt;He reiterated that in pragmatic terms, there usually is a hyrbid approach.

&lt;br&gt;&lt;br&gt;His presentation slides and sample core are available here:
http://www.EricEngler.com/Presentations.aspx

&lt;br&gt;&lt;br&gt;Next week, he will give a talk about ASP.NET AJAX in Alpharetta as well at the Atlanta Cutting Edge Technologies group mentioned above.

&lt;br&gt;&lt;br&gt;ASP.NET AJAX - Beyond the UpdatePanel
This is scheduled for March 5, 2007 at the Atlanta Cutting Edge User Group

&lt;br&gt;&lt;br&gt;Topics will include:

    &lt;br&gt;&lt;br&gt;* the parts of the AJAX Distribution
    &lt;br&gt;* UpdatePanel - a brief obligatory overview
    &lt;br&gt;* the ScriptManager
    &lt;br&gt;* AJAX Control Toolkit: design of server-side control extenders and custom controls
    &lt;br&gt;* BLOCKED SCRIPT how to use objects in a non-OOP language
    &lt;br&gt;* AJAX Client Library: micro sized version of the .NET Framework written in JavaScript
    &lt;br&gt;* ASP.NET AJAX Application Services
    &lt;br&gt;* calling Web Services from the Client
    &lt;br&gt;* Debugging AJAX applications

This upcoming book is the suggested reference: Professional ASP.NET AJAX&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=202841" width="1" height="1"&gt;</description></item><item><title>Passed 70-316 Windows Applications with C# Today!</title><link>http://www.dotnetjunkies.com/WebLog/joshuagough/archive/2007/01/28/190231.aspx</link><pubDate>Mon, 29 Jan 2007 00:31:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:190231</guid><dc:creator>JoshuaGough</dc:creator><slash:comments>1</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/joshuagough/comments/190231.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/joshuagough/commentrss.aspx?PostID=190231</wfw:commentRss><description>Nothing quite like waiting 9 months between taking exams is there?&lt;br&gt;&lt;br&gt;I passed the 70-316 Developing Windows Applications with Visual Studio.NET and C# with a score of 960! I didn't expect to pass with a score like that, so I was pleasantly surprised. I am primarily a Web Application developer.&lt;br&gt;&lt;br&gt;First, thanks to all the guys currently or formerly at Abel for inspiring me to get this finished and thanks to Mr. Hy and Mr. Bondar from CDC, and to Mr. Moore for continuing to encourage me to keep going! You guys rock! If there's anything you need that I can help with, just let me know!&lt;br&gt;&lt;br&gt;Most importantly, thanks to my uncle and my grandfather for their combined 80 years of programming wisdom (among many other types of wisdom). Without you guys as mentors, I would have done nothing ever, &lt;span&gt;period&lt;/span&gt;. Same goes for you guys too, just let me know.&lt;br&gt;&lt;br&gt;For the company I work for, Abel Solutions, Inc, we must complete the certification this year to keep our Gold Partner status. I will get a bonus if I finish by May 1st this year :-)&lt;br&gt;&lt;br&gt;That will mean now doing the original .NET MCAD and then two of the new 2.0 exams. So, if I still want to get MCSD, I'll end up taking 7 exams such that the first 5 complete the requirement for our company to maintain the MS Partnership status. I would like to take that big architecture exam because I'd like a refresher and an MS-specific version of some of the courses I took in college about systems analysis and design.&lt;br&gt;&lt;br&gt;You can see the requirements on MS's site as to how the Gold Parntership has changed.&lt;br&gt;&lt;br&gt;My next exam will be 70-320, XML Web Services and Components. This is by far my weakest subject of the three MCAD, so I'll have to really come up with a good study strategy.&lt;br&gt;&lt;br&gt;Working all day in front of a PC doesn't leave me with a lot of energy or desire to sit in front of one at night and type in code samples, however. Here is how I studied for 70-316:&lt;br&gt;&lt;br&gt;&lt;ol&gt;&lt;li&gt;Used a practice Transcender exam.&lt;/li&gt;&lt;li&gt;Printed out the Transcender exam and took the practice once&lt;/li&gt;&lt;li&gt;Reviewed the topics I did poorly on by using the Que book&lt;/li&gt;&lt;li&gt;Retook the Transcender exam and re-reviewed questions I still got wrong&lt;/li&gt;&lt;li&gt;Reviewed the 15 questions at the end of each of the Que book chapters.&lt;/li&gt;&lt;li&gt;Created MP3 files using Second Speech Center that were based on a "Save as Text" version of the Que chapters.&lt;/li&gt;&lt;li&gt;Listened to these like flash cards on my iPod in the car or when going for a walk in the evening.&lt;/li&gt;&lt;/ol&gt;I did very few code samples from the books. This is in stark contrast to how I prepared for 70-315. Since I was really refreshing my .NET knowledge for 70-315, I actually read the entire Que book and did all the code samples. That was exhausting. Despite that, I scored 943 on that exam. So, if I can get 960 with this other approach, I'm all for it.&lt;br&gt;&lt;br&gt;I am going to use a slightly different approach for 70-320 as well. I'll do something similar to the steps above, but I plan to also make MP3 files of the 15 questions at the end of each of the Que chapters. Those questions tend to be much more difficult than either the Transcender or the actual exam, so knowing that material tends to put you in good shape.&lt;br&gt;&lt;br&gt;When I first got into this, I thought just trying to memorize the material without doing the hands on labs was a cheap way to pass, but now I realize that was a foolishly prideful attitude. The fact of the matter is that I use only a subset of any of these things in everday code and design. So, while it would be nice to have time to do hands on practice with all the concepts, it's also good to have enough memory of a subject to know where to go when the time comes that I will need it. This will mean I have enough in my mind to tell me that I don't have to reinvent the wheel, just have to buy &lt;br&gt;some new wheel covers.&lt;br&gt;&lt;br&gt;More to come soon.&lt;br&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=190231" width="1" height="1"&gt;</description></item><item><title>Exciting New Products from Microsoft Development Teams on the Way</title><link>http://www.dotnetjunkies.com/WebLog/joshuagough/archive/2007/01/18/188100.aspx</link><pubDate>Fri, 19 Jan 2007 00:12:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:188100</guid><dc:creator>JoshuaGough</dc:creator><slash:comments>184</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/joshuagough/comments/188100.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/joshuagough/commentrss.aspx?PostID=188100</wfw:commentRss><description>&lt;H1&gt;&lt;A&gt;Staying on Top of New Technology&lt;/A&gt;&lt;/H1&gt;
&lt;P&gt;It is important to keep an eye on what is "coming down the pipe" from Microsoft and their competitors. There are several great resources that don't require a lot of time to keep atuned to these developments. Here are some of these resources:&lt;/P&gt;
&lt;H2&gt;&lt;A&gt;Scott Guthrie, Microsoft General Manager&lt;/A&gt;&lt;/H2&gt;
&lt;P&gt;Scott Guthrie runs the teams that build IIS, &lt;A href="http://asp.net/"&gt;ASP.NET&lt;/A&gt;, Atlas, CLR, Compact Framework, Windows Forms, Commerce Server, Visual Web Developer 2005 and Visual Studio Tools for WPF)&lt;/P&gt;
&lt;H3&gt;&lt;A&gt;Scott Guthrie's Blog: &lt;/A&gt;&lt;A href="http://weblogs.asp.net/scottgu/"&gt;&lt;SPAN&gt;http://weblogs.asp.net/scottgu/&lt;/SPAN&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/H3&gt;
&lt;P&gt;Scott Guthrie is the co-creator of &lt;A href="http://asp.net/"&gt;ASP.NET&lt;/A&gt;. He is the General Manager for the .NET Framework, IIS, &lt;A href="http://asp.net/"&gt;ASP.NET&lt;/A&gt;, Commerce Server, Windows Presentation Foundation, and more. He will be giving a presentation at MIX07 with MS Chief Software Architect Ray Ozzie. He always posts great things on his blog that are very helpful and he responds to his emails and comments with helpful information.&lt;/P&gt;
&lt;H3&gt;&lt;A&gt;Microsoft Upcoming Technologies in 2007: &lt;/A&gt;&lt;A href="http://channel9.msdn.com/showpost.aspx?postid=271984"&gt;&lt;SPAN&gt;http://channel9.msdn.com/showpost.aspx?postid=271984&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/A&gt;&lt;/H3&gt;
&lt;P&gt;Interview with Scott Guthrie about '07 Microsoft Web Technologies, including WPFE, a new combination of &lt;A href="http://asp.net/"&gt;ASP.NET&lt;/A&gt; and AJAX aimed at rivaling Mozilla's XUL framework. It is cross-browser and cross-platform, unlike Mozilla's XUL which is only cross-platform, but specific to Firefox. &lt;/P&gt;
&lt;H3&gt;&lt;A&gt;Microsoft CodePlex and the Web Client Software Factory Toolkit&lt;/A&gt;&lt;/H3&gt;
&lt;P&gt;CodePlex is the Microsoft answer to SourceForge. As MS realizes the power of community-based and assisted project, they are capitalizing on it. They now post a lot of projects and guidance on CodePlex, including the newly released Web Client Software Factory toolkit, which looks to provide guidance for developers in creating modular &lt;A href="http://asp.net/"&gt;ASP.NET&lt;/A&gt; 2.0 solutions at &lt;A href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=websf"&gt;http://www.codeplex.com/Wiki/View.aspx?ProjectName=websf&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The overall goal of this toolkit is to provide guidance for developing "Composite Web Clients", &lt;/P&gt;
&lt;P&gt;This project aims to address guidance for a variety of topics, depicted by this documentation download:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.codeplex.com/websf/Release/ProjectReleases.aspx?ReleaseId=1563"&gt;http://www.codeplex.com/websf/Release/ProjectReleases.aspx?ReleaseId=1563 &lt;/A&gt;&lt;/P&gt;
&lt;H2&gt;&lt;A&gt;ASP.NET Web Site and Forums&lt;/A&gt;&lt;/H2&gt;
&lt;P&gt;Microsoft's home for &lt;A href="http://asp.net/"&gt;ASP.NET&lt;/A&gt; Technologies: &lt;A href="http://www.asp.net/"&gt;http://www.asp.net/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://asp.net/"&gt;ASP.NET&lt;/A&gt; Forums: &lt;A href="http://www.asp.net/forums"&gt;http://www.asp.net/forums&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;A&gt;MSDN Channel 9&lt;/A&gt;&lt;/H2&gt;
&lt;P&gt;Contains interviews and videos about new Microsoft technologies.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://channel9.msdn.com/"&gt;http://channel9.msdn.com&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;&lt;A&gt;System Architecture&lt;/A&gt;&lt;/H1&gt;
&lt;H2&gt;&lt;A&gt;Overall&lt;/A&gt;&lt;/H2&gt;
&lt;OL&gt;
&lt;LI&gt;The Microsoft Patterns and Practices Group: &lt;A href="http://msdn.microsoft.com/practices/"&gt;http://msdn.microsoft.com/practices/&lt;/A&gt; Contains Best Practices and guidance from Microsoft for developers. 
&lt;LI&gt;The Architecture Podcast, ARCast: &lt;A href="http://channel9.msdn.com/ShowForum.aspx?ForumID=34"&gt;http://channel9.msdn.com/ShowForum.aspx?ForumID=34&lt;/A&gt; Contains many interviews with industry professionals about new technologies.&lt;/LI&gt;&lt;/OL&gt;
&lt;H2&gt;&lt;A&gt;Front End / UI Layer&lt;/A&gt; &lt;/H2&gt;
&lt;P&gt;Things to keep in mind for front end, customer-facing interface code:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://ajax.net/"&gt;AJAX.NET&lt;/A&gt; Framework for streamlining workflows and creating better user experience: &lt;A href="http://ajax.net/"&gt;AJAX.NET&lt;/A&gt;: &lt;A href="http://ajax.asp.net/default.aspx?tabid=47"&gt;http://ajax.asp.net/default.aspx?tabid=47&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://asp.net/"&gt;ASP.NET&lt;/A&gt; 2.0: &lt;A href="http://www.asp.net/"&gt;http://www.asp.net/&lt;/A&gt; contains news, links and videos and many tutorials.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.learnvisualstudio.net/"&gt;http://www.LearnVisualStudio.NET&lt;/A&gt; contains great videos and tutorials&lt;/LI&gt;&lt;/OL&gt;
&lt;H2&gt;&lt;A&gt;Middle Layer Business Entities&lt;/A&gt;&lt;/H2&gt;
&lt;P&gt;There are a lot of developments in this space right now, including many by Microsoft.&lt;/P&gt;
&lt;P&gt;Review of Available Object-Relational-Mapping Technologies in .NET: &lt;A href="http://www.codeproject.com/dotnet/CodeGenResource.asp"&gt;http://www.codeproject.com/dotnet/CodeGenResource.asp&lt;/A&gt; Contains a run down of many third party and open source packages for addressing the middle tier of an application. There are no clear winners however.&lt;/P&gt;
&lt;P&gt;Rockford Lhotka has developed a framework for Business Objects that is very popular, &lt;A href="http://csla.net/"&gt;CSLA.NET&lt;/A&gt;, &lt;A href="http://www.lhotka.net/"&gt;http://www.lhotka.net/&lt;/A&gt; It has wide-spread adoption across a number of high profile users: &lt;A href="http://www.lhotka.net/Article.aspx?area=4&amp;amp;id=a26b2727-f99d-485b-aa3e-a5466e534a2b"&gt;http://www.lhotka.net/Article.aspx?area=4&amp;amp;id=a26b2727-f99d-485b-aa3e-a5466e534a2b &lt;/A&gt;&lt;/P&gt;
&lt;H2&gt;&lt;A&gt;ADO.NET vNext&lt;/A&gt;&lt;/H2&gt;
&lt;P&gt;Microsoft is going to release LINQ soon, Language Integrated Query, as part of C# 3.0. A Preview of &lt;A href="http://ado.net/"&gt;ADO.NET&lt;/A&gt; vNext is available here showcasing the features that will be available in forthcoming product releases:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=b68f6f53-ec87-4122-b1c8-ee24a043bf72&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=b68f6f53-ec87-4122-b1c8-ee24a043bf72&amp;amp;displaylang=en &lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Here is a 12 minute screen cast that showcases &lt;A href="http://ado.net/"&gt;ADO.NET&lt;/A&gt; vNext. Well worth the twelve minutes:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://datajunkies.net/screencasts/ado.net_vnext_ctp_screencast1/ado.net_vnext_ctp_screencast1.html"&gt;http://datajunkies.net/screencasts/ado.net_vnext_ctp_screencast1/ado.net_vnext_ctp_screencast1.html &lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The &lt;A href="http://ado.net/"&gt;ADO.NET&lt;/A&gt; Team's Blog is Here: &lt;A href="http://blogs.msdn.com/adonet/archive/2006/08/15/701479.aspxv"&gt;http://blogs.msdn.com/adonet/archive/2006/08/15/701479.aspxv&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The features of &lt;A href="http://ado.net/"&gt;ADO.NET&lt;/A&gt; vNext are as follows. Should this product become available soon, these features make it well worth considering before attempting to build any custom solution for entity management.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN&gt;The &lt;A href="http://ado.net/"&gt;ADO.NET&lt;/A&gt; Entity Framework, which includes: &lt;/SPAN&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN&gt;The Entity Data Model (EDM), which allows developers to model data at a higher level of abstraction &lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;A powerful client-views/mapping engine to map to and from store schemas &lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;Full query support over EDM schemas using Entity SQL and LINQ &lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;An object services layer that allows you to choose to present query results as rows and columns or as objects. When using .NET objects, the system will transparently do identity resolution, change tracking and update processing for you. &lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;An open provider model that allows other stores to plug into the &lt;A href="http://ado.net/"&gt;ADO.NET&lt;/A&gt; Entity Framework&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;SPAN&gt;Language-Integrated Query (LINQ) integration in &lt;A href="http://ado.net/"&gt;ADO.NET&lt;/A&gt; for this CTP includes: &lt;/SPAN&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN&gt;LINQ to Entities: formulate queries using LINQ against your EDM schemas &lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;LINQ to DataSet: the DataSet finally gets full query capabilities! You can formulate LINQ queries that go against one or more DataTable objects. The LINQ to DataSet implementation will even optimize certain query patterns for better execution performance. &lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;SPAN&gt;Tools &lt;/SPAN&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN&gt;We're working hard to include a rich set of tools that integrate naturally with the runtime components to provide a great end-to-end experience. Some early tools are included in this CTP, and more will come soon!&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;H2&gt;&lt;A&gt;Data Access Layer&lt;/A&gt;&lt;/H2&gt;
&lt;P&gt;In VS 2005, the Strongly Typed DataAdapter and other associated classes provides a nice way to get intellisense plus ease of maintenance and compile-time safety. See Scott's blog for information about this:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://weblogs.asp.net/scottgu/archive/2006/01/15/435498.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2006/01/15/435498.aspx&lt;/A&gt; This shows how to build a strongly-typed DataAdapter against an existing Database table.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=188100" width="1" height="1"&gt;</description></item><item><title>Strip and Clean HTML and Attributes, but Allow certain tags and attributes?</title><link>http://www.dotnetjunkies.com/WebLog/joshuagough/archive/2007/01/18/188032.aspx</link><pubDate>Thu, 18 Jan 2007 16:22:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:188032</guid><dc:creator>JoshuaGough</dc:creator><slash:comments>0</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/joshuagough/comments/188032.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/joshuagough/commentrss.aspx?PostID=188032</wfw:commentRss><description>Hello,

Has anyone found a good solution for filtering the input from web forms to allow a small subset of explicitly defined HTML and Attributes, but excising any of the non-allowed.

Basically, I would like to be able to specify an "allow" list that might contain B, I, U, TABLE, TD, TR. and a large number of attributes, excluding, of course, onmouse*!

 I believe I could do this with Html Agility Pack: http://www.codeplex.com/htmlagilitypack

 
But, I wondered if anyone had written or come across something that is forward only and does not parse the content into a tree the way that Agility Pack does, since I'm not really concerned with well-formedness, just that absolutely no potentially descructive script or object tags or attributes get through.

 
Thank you,

Josh&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=188032" width="1" height="1"&gt;</description></item><item><title>__doPostBack and the empty second parameter? How to manually set it?</title><link>http://www.dotnetjunkies.com/WebLog/joshuagough/archive/2006/09/20/147672.aspx</link><pubDate>Wed, 20 Sep 2006 15:33:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:147672</guid><dc:creator>JoshuaGough</dc:creator><slash:comments>1</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/joshuagough/comments/147672.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/joshuagough/commentrss.aspx?PostID=147672</wfw:commentRss><description>Is it possible to manually specify the second parameter in a __doPostBack handler?&lt;br&gt;&lt;br&gt;I have this code:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Text="Test of Server Side Link Button"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CommandName="Action"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CommandArgument="$1"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /&amp;gt;&lt;br&gt;The rendered code looks like this:&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BLOCKED SCRIPT__doPostBack('ctl00$ctl00$ctlPagePlaceHolder$blah$blah$actTestServerSide','')&lt;br&gt;&lt;br&gt;That second parameter is empty though!&lt;br&gt;&lt;br&gt;I need to be able to have code on the _client side_ replace the $1 with a value of my choice before the actual link gets submitted. The reason for this is that I have a GridView with 100 items in it, and I pass down one static block of HTML code as a client-side template for a context menu that operates on the line item of each GridViewRow instance. I then have a click handler which does something like:&lt;br&gt;&lt;pre id="line447"&gt;&lt;span class="attribute-name"&gt;onclick&lt;/span&gt;=&lt;span class="attribute-value"&gt;"ContextMenu_Place(event,'ctlPathGoesHere$blah$blah$blah','ctl00Path$blah$blah',[],['189884','44394743']);&lt;/span&gt;&lt;/pre&gt;The ContextMenu_Place function copies the template code and then uses the values of the second array to replace the placeholders. The first array, empty here, specifies the css class name of rows in the menu that need to be grayed out.&lt;br&gt;&lt;br&gt;The static block looks like this when rendered to the client side:&lt;br&gt;&lt;pre id="line381"&gt;    &amp;lt;&lt;span class="start-tag"&gt;table&lt;/span&gt;&lt;span class="attribute-name"&gt; id&lt;/span&gt;=&lt;span class="attribute-value"&gt;"blah_blah_table" &lt;/span&gt;&lt;span class="attribute-name"&gt;border&lt;/span&gt;=&lt;span class="attribute-value"&gt;"0" &lt;/span&gt;&lt;span class="attribute-name"&gt;cellpadding&lt;/span&gt;=&lt;span class="attribute-value"&gt;"0" &lt;/span&gt;&lt;span class="attribute-name"&gt;cellspacing&lt;/span&gt;=&lt;span class="attribute-value"&gt;"0" &lt;/span&gt;&lt;span class="attribute-name"&gt;class&lt;/span&gt;=&lt;span class="attribute-value"&gt;"ActionsContextMenuContainer"&lt;/span&gt;&amp;gt;&lt;br&gt;	&amp;nbsp;&amp;lt;&lt;span class="start-tag"&gt;tr&lt;/span&gt;&lt;span class="attribute-name"&gt; valign&lt;/span&gt;=&lt;span class="attribute-value"&gt;"top"&lt;/span&gt;&amp;gt;&lt;br&gt;		&amp;lt;&lt;span class="start-tag"&gt;td&lt;/span&gt;&amp;gt;&lt;br&gt;            &amp;lt;&lt;span class="start-tag"&gt;div&lt;/span&gt;&lt;span class="attribute-name"&gt; id&lt;/span&gt;=&lt;span class="attribute-value"&gt;"blah$blah"&lt;/span&gt;&amp;gt;&lt;br&gt;                &amp;lt;&lt;span class="start-tag"&gt;div&lt;/span&gt;&lt;span class="attribute-name"&gt; class&lt;/span&gt;=&lt;span class="attribute-value"&gt;"actContact"&lt;/span&gt;&amp;gt;&amp;lt;&lt;span class="start-tag"&gt;a&lt;/span&gt;&lt;span class="attribute-name"&gt; title&lt;/span&gt;=&lt;span class="attribute-value"&gt;"Contact" &lt;/span&gt;&lt;span class="attribute-name"&gt;href&lt;/span&gt;=&lt;span class="attribute-value"&gt;"/Contact.aspx?Item=$1"&lt;/span&gt;&amp;gt;Contacta&amp;gt;div&amp;gt;&lt;br&gt;                &amp;lt;&lt;span class="start-tag"&gt;div&lt;/span&gt;&lt;span class="attribute-name"&gt; class&lt;/span&gt;=&lt;span class="attribute-value"&gt;"actPay"&lt;/span&gt;&amp;gt;&amp;lt;&lt;span class="start-tag"&gt;a&lt;/span&gt;&lt;span class="attribute-name"&gt; title&lt;/span&gt;=&lt;span class="attribute-value"&gt;"Pay" &lt;/span&gt;&lt;span class="attribute-name"&gt;href&lt;/span&gt;=&lt;span class="attribute-value"&gt;"/Pay.aspx?Item=$1"&lt;/span&gt;&amp;gt;Paya&amp;gt;div&amp;gt;&lt;br&gt;		&amp;lt;&lt;span class="start-tag"&gt;div&lt;/span&gt;&lt;span class="attribute-name"&gt; class&lt;/span&gt;=&lt;span class="attribute-value"&gt;"actTestServerSide"&lt;/span&gt;&amp;gt;&lt;br&gt;                    &amp;lt;&lt;span class="start-tag"&gt;a&lt;/span&gt;&lt;span class="attribute-name"&gt; id&lt;/span&gt;=&lt;span class="attribute-value"&gt;"blah$blah$actTestServerSide" &lt;/span&gt;&lt;span class="attribute-name"&gt;&lt;br&gt;			href&lt;/span&gt;=&lt;span class="attribute-value"&gt;"BLOCKED SCRIPT__doPostBack('$blah$blah$actTestServerSide','')"&lt;/span&gt;&amp;gt;Test of Server Side Link Buttona&amp;gt;&lt;br&gt;                div&amp;gt;                &lt;br&gt;            div&amp;gt;&lt;br&gt;&lt;/pre&gt;&lt;pre id="line388"&gt;        td&amp;gt;&lt;br&gt;	tr&amp;gt;&lt;br&gt;    table&amp;gt;&lt;br&gt;&lt;br&gt;In the first two cases, the links are to external pages, not POSTBACKS. But in the last case, the action should be POSTBACK, so I need that last line to read:&lt;br&gt;&lt;br&gt;&lt;span class="attribute-name"&gt;    href&lt;/span&gt;=&lt;span class="attribute-value"&gt;"BLOCKED SCRIPT__doPostBack('$blah$blah$blah','$1')"&lt;/span&gt;&amp;gt;Test of Server Side Link Buttona&amp;gt;&lt;br&gt;&lt;br&gt;This will enable me to use my client side templating function to replace the argument with the actual line item ID.&lt;br&gt;&lt;br&gt;But, I can't figure out how to get that second parameter of __doPostBack to be non-blank.&lt;br&gt;&lt;br&gt;Anyone have any ideas?&lt;br&gt;&lt;br&gt;Thanks&lt;br&gt;&lt;br&gt;------&lt;br&gt;Update&lt;br&gt;&lt;br&gt;I read about the Page.ClientScript.GetPostBackEventRefernce method.&lt;br&gt;
This let me accomplish what I need, even though trying to set a parameter with it still failed. I ended up creating a hidden field, a hidden button with a server side event handler. I made the postback target that button, and then read the hidden field's value in the event handler after manually setting the value through the JS href prior to the call to __doPostBack:&lt;br&gt;&lt;br&gt;
&lt;xmp&gt;


...
&lt;div class="actTestServerSide"&gt;                    
 &lt;a title="Send the id to the server side"&gt;').value = '$1'; ;"&gt;Send to Server Side&lt;/a&gt;
&lt;/div&gt;                
&lt;/xmp&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=147672" width="1" height="1"&gt;</description></item><item><title>Themes: PreInit and Custom Controls? Never the twain shall meet?</title><link>http://www.dotnetjunkies.com/WebLog/joshuagough/archive/2006/09/13/146975.aspx</link><pubDate>Wed, 13 Sep 2006 15:17:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:146975</guid><dc:creator>JoshuaGough</dc:creator><slash:comments>215</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/joshuagough/comments/146975.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/joshuagough/commentrss.aspx?PostID=146975</wfw:commentRss><description>I want to be able to add a "PrintButton", derived from ImageButton to a page. When the user clicks this button, it should set the Page.Theme to "Print". All the examples I've seen about themes tend to rely on QueryString since you can access that within the PreInit event of the page.&lt;br&gt;&lt;br&gt;First, is there a way to add a query string to a form's action URL so that the postback could actually have a query string?&lt;br&gt;&lt;br&gt;Secondly, is there a way to add your own event handlers to Page.PreInit from controls?&lt;br&gt;&lt;br&gt;I tried to do it in the PrintButton constructor, but Page is null at that point. Trying it in PrintButton.Init is too late since Page.PreInit event handlers have already been fired.&lt;br&gt;&lt;br&gt;I already got it to work by putting code in my BasePage's PreInit handler, but I'd rather than have that code run on every single page, because not every page is going to have a PrintButton on it. The code loops through Request.Form and looks for a key whose name contains "ctlPrint", which will contain cltPrint.x and ctlPrint.y coordinates when the imagebutton is clicked.&lt;br&gt;&lt;br&gt;But, I just wonder if anyone knows another way to do this that will keep all the logic within the PrintButton control itself.&lt;br&gt;&lt;br&gt;Thanks&lt;br&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=146975" width="1" height="1"&gt;</description></item><item><title>Be careful with GridView.SortExpression</title><link>http://www.dotnetjunkies.com/WebLog/joshuagough/archive/2006/08/29/145416.aspx</link><pubDate>Tue, 29 Aug 2006 15:14:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:145416</guid><dc:creator>JoshuaGough</dc:creator><slash:comments>1</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/joshuagough/comments/145416.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/joshuagough/commentrss.aspx?PostID=145416</wfw:commentRss><description>Be careful with this property. It may be tempting to put a SQL column name into it like SortExpression="SomeColumnName", and then feed that into your SQL query. Buy, ASP.NET does not check whether the incoming sort expression actually existed in your original code. Instead, if you pull up Fiddler, you can replay your request and modify the sort epxression to be anything you like, and thus potentially introduce SQL-injection attacks. Rather than trusting that the SortExpression you get in your event handlers must have come from one of the SortExpression values you placed in your declarative ASP.NET code, a safer practice is to perform a lookup against the input value and return the actual expression that you want. The old adage says "never trust input data" for a reason.&lt;br&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=145416" width="1" height="1"&gt;</description></item><item><title>Modular ASP.NET 2.0 Architectures?</title><link>http://www.dotnetjunkies.com/WebLog/joshuagough/archive/2006/07/05/141588.aspx</link><pubDate>Wed, 05 Jul 2006 14:21:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:141588</guid><dc:creator>JoshuaGough</dc:creator><slash:comments>111</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/joshuagough/comments/141588.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/joshuagough/commentrss.aspx?PostID=141588</wfw:commentRss><description>&lt;p&gt;Modular ASP.NET 2.0 Architectures?&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;I'm interested in hearing how other developers are going
about designing ASP.NET 2.0 applications that are modular. Here's an example of
what I mean:&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Core Web App: top-level MasterPage, BasePage, BaseControl,
Authentication/Authorization, Common DAL classes / UI Code / Error handling
page / Logging facilities&lt;/p&gt;

&lt;p&gt;Shared Components: CSS, Images, JavaScript libraries, Common
ASCX/Server Controls, etc&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Major Feature 1: ASPX Pages (and code behind), sub
MasterPage, Private Components: css/images/javascript, ASCX controls, etc,
private DAL code&lt;/p&gt;

&lt;p&gt;Major Feature 2: ASPX Pages (and code behind), sub
MasterPage, Private Components: css/images/javascript, ASCX controls, etc,
private DAL code&lt;/p&gt;

&lt;p&gt;Major Feature 3: ASPX Pages (and code behind), sub
MasterPage, Private Components: css/images/javascript, ASCX controls, etc,
private DAL code&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;In this case, the core application has a set of classes and
resources that all major features will depend on, but the core does not depend
on any of the major features.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;It looks like is starting to sound like DNN right off the
bat, but where it is different is that each &amp;quot;Major Feature&amp;quot; is like a
separate mini application unto its own, rather than a discrete module meant for
placing on any chosen page. The feature will have its own internal structure
and relationships, yet be housed within the core application. It is meant to
augment a well-structured and well-defined application, yet be separable from
it to the degree that all other major features can function without it (to the
degree possible). I'm not thinking so far as requiring the core to be
'intelligent' enough to detect dependencies and resolve all of them through
run-time configuration, but more so the ability to independently package and
deploy units of related {ASPX / ASCX / Code Behind / CSS / JS}.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;For example, if you have a site like this: http://host/&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Then, major feature 1 should be accessed via
http://host/MajorFeature1, and any functions therein by
MajoreFeature1/Function1.aspx  ... etc etc&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Physically, this is easy to implement in a single-solution /
Web Application Project, by putting each feature in its own folder and
following a set of conventions for naming subdirectories and file names, and
for ensuring that no core parts have improper dependencies on code physically
located in any of the subdirectories.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;However, the code will all compile into one web application
DLL that will need to be deployed. This is probably not a problem in most
cases.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;To get past this, you could treat each of the ASPX pages as
little more than entry points and delegate all real work to controls that could
be implemented in their own projects and linked to the main project. It at
least keeps the functional code segregated, but the aspx pages still have to
physically reside in the one big web app project.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The problem with this approach though is that the front-end
code must be very simple and all really UI must be done purely with code
behind, so far as I can tell.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Is there any asp.net 2.0 &amp;quot;standard&amp;quot; or de facto
way to bundle up related {ASPX / ASCX / Code Behind / CSS / JS} into deployable
units in this fashion, or does DNN and the like still provide the best model
for going about this?&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Thanks,&lt;/p&gt;

&lt;p&gt;Josh&lt;/p&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=141588" width="1" height="1"&gt;</description></item><item><title>Atlas, Carrying the Weight of the POSTBACK on His Shoulders? The Icredibly Growing POSTBACK</title><link>http://www.dotnetjunkies.com/WebLog/joshuagough/archive/2006/06/28/141278.aspx</link><pubDate>Wed, 28 Jun 2006 05:52:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:141278</guid><dc:creator>JoshuaGough</dc:creator><slash:comments>673</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/joshuagough/comments/141278.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/joshuagough/commentrss.aspx?PostID=141278</wfw:commentRss><description>Atlas, Carrying the Weight of the POSTBACK on His Shoulders?&lt;br&gt;
&lt;br&gt;
At first glance and 2nd, 3rd, 4th clicks, this site looks really great:&lt;br&gt;
&lt;br&gt;
&lt;a href="http://asyncpostback.com/02_UpdatePanel/02_AtlasUpdatePanel.aspx"&gt;http://asyncpostback.com/02_UpdatePanel/02_AtlasUpdatePanel.aspx&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
If you examine the browser/server conversation for the first request
and response with the Live HTTP Headers FireFox extension, you'll see
this:&lt;br&gt;
&lt;br&gt;
GET /02_UpdatePanel/02_AtlasUpdatePanel.aspx HTTP/1.1&lt;br&gt;
Host: asyncpostback.com&lt;br&gt;
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4)
Gecko/20060508 Firefox/1.5.0.4&lt;br&gt;
Accept:
text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5&lt;br&gt;
Accept-Language: en-us,en;q=0.5&lt;br&gt;
Accept-Encoding: gzip,deflate&lt;br&gt;
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&lt;br&gt;
Keep-Alive: 300&lt;br&gt;
Connection: keep-alive&lt;br&gt;
Referer:
http://asyncpostback.com/02_UpdatePanel/02_AtlasUpdatePanel.aspx&lt;br&gt;
&lt;br&gt;
HTTP/1.x 200 OK&lt;br&gt;
Cache-Control: private&lt;br&gt;
Content-Length: 62659&lt;br&gt;
Content-Type: text/html; charset=utf-8&lt;br&gt;
Server: Microsoft-IIS/6.0&lt;br&gt;
X-Powered-By: ASP.NET&lt;br&gt;
X-AspNet-Version: 2.0.50727&lt;br&gt;
Date: Wed, 28 Jun 2006 05:29:59 GMT&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
OK, Fine. Expected. 62 K for a first load. Not bad.&lt;br&gt;
&lt;br&gt;
Now start clicking on column headers or the page numbers and watch the
Content-Length. It starts at about 8.5 k. Nice. But, then it grows, and
grows, and grows, and grows, and grows. It's everlasting.&lt;br&gt;
&lt;br&gt;
When I did that about 300 times, the last post operation had a content
length of nearly 100,000.&lt;br&gt;
&lt;br&gt;
http://asyncpostback.com/02_UpdatePanel/02_AtlasUpdatePanel.aspx&lt;br&gt;
&lt;br&gt;
POST /02_UpdatePanel/02_AtlasUpdatePanel.aspx HTTP/1.1&lt;br&gt;
Host: asyncpostback.com&lt;br&gt;
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4)
Gecko/20060508 Firefox/1.5.0.4&lt;br&gt;
Accept:
text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5&lt;br&gt;
Accept-Language: en-us,en;q=0.5&lt;br&gt;
Accept-Encoding: gzip,deflate&lt;br&gt;
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&lt;br&gt;
Keep-Alive: 300&lt;br&gt;
Connection: keep-alive&lt;br&gt;
Content-Type: application/x-www-form-urlencoded&lt;br&gt;
delta: true&lt;br&gt;
Cache-Control: no-cache, no-cache&lt;br&gt;
Content-Length: 89381&lt;br&gt;
Pragma: no-cache&lt;br&gt;
ctl00$ScriptManager=c... 98,000 bytes on the POSTBACK, 98,000 bytes: Ya
take 1,000 down, Ya POST it BACK: 99,000 bytes on the POSTBACK
...DAv&amp;amp;&lt;br&gt;
HTTP/1.x 200 OK&lt;br&gt;
Cache-Control: no-cache&lt;br&gt;
Pragma: no-cache&lt;br&gt;
Content-Length: 98334&lt;br&gt;
Content-Type: text/xml; charset=utf-8&lt;br&gt;
Expires: -1&lt;br&gt;
Server: Microsoft-IIS/6.0&lt;br&gt;
X-Powered-By: ASP.NET&lt;br&gt;
X-AspNet-Version: 2.0.50727&lt;br&gt;
Date: Wed, 28 Jun 2006 05:28:32 GMT&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Is this a problem with the configuration for the element that asyncpostback.com is using the Atlas
UpdatePanel control? You can also use Fiddler to watch the requests. I think Fiddler is a bit slicker than Live HTTP Headers, obviously, so use that if you're testing in IE. It is definitely the ViewState parameter that grows and grows and grows, so this has to be configurable I hope.&lt;br&gt;
&lt;br&gt;-- Update --&lt;br&gt;&lt;br&gt;When I tried this in my own project, I used this code:&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;atlas:ScriptManager ID="ctlScriptManager" EnablePartialRendering="true" EnableViewState="false" runat="server" /&amp;gt;&lt;br&gt;&lt;br&gt;And then:&lt;br&gt;&lt;br&gt;&amp;lt;atlas:UpdatePanel ID="ctlUpdatePanel" EnableViewState="false" runat="server" Mode="Conditional" RenderMode="Inline"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ContentTemplate&amp;gt;&lt;br&gt;...&lt;br&gt;With view state disabled, the post size stays very small throughout the chain of request/response pairs. This is much better!&lt;br&gt;&lt;br&gt;&lt;br&gt;
Thanks,&lt;br&gt;
Josh&lt;br&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=141278" width="1" height="1"&gt;</description></item><item><title>Box Layout Manager for ASP.NET 2.0? Does it exist?</title><link>http://www.dotnetjunkies.com/WebLog/joshuagough/archive/2006/06/26/141182.aspx</link><pubDate>Mon, 26 Jun 2006 18:30:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:141182</guid><dc:creator>JoshuaGough</dc:creator><slash:comments>1</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/joshuagough/comments/141182.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/joshuagough/commentrss.aspx?PostID=141182</wfw:commentRss><description>A few years ago, my uncle and I wrote a simple Box Layout control for ASP.NET 1.0 that allowed you to write code like this:&lt;br&gt;&lt;br&gt;


      &amp;lt;UVc:LayoutMan id ="uvcBox" runat ="server" Alignment="HorizontalAlignment"&amp;gt;

                              &amp;lt;asp:Panelid="Panel1"runat="server"BackColor="LightGreen"BorderWidth="1"&amp;gt;Hi!&amp;lt;/asp:Panel&amp;gt;

                                  &amp;lt;asp:Panelid="Panel2"runat="server"BackColor="LightGreen"BorderWidth="1"&amp;gt;Testing!&amp;lt;/asp:Panel&amp;gt;

                              &amp;lt;asp:Calendar id ="Calendar1" runat ="server"&amp;gt;&amp;lt;/ asp:Calendar &amp;gt;

      &amp;lt;/UVc:LayoutMan &amp;gt;

This would then render each of the controls within a table. In this case, a three celled table  with in of the controls in a TD tag within the same TR

If you set it to vertical alignment to vertical, then you'd have three TR tags.

This was inspired by Mozilla's XUL and Gtk's Box layout techniques.

I figured that something like this has to have been put into ASP.NET by now. Were we just missing it in the docs somewhere?

The code is here:

http://www.compumagic.com/AspXer/LayoutMan.htm

This is something pretty cool that he wrote too. I wonder how well it works. I have not tried it in years:

http://www.compumagic.com/AspXer/


 AspXer is a utility used to convert simple HTML forms to Aspx form controls.  Aspx is a file extension recognized by  Microsoft's DOT NET framework.

AspXer is beta software written in c sharp for Microsoft ASP.NET.  It takes a simple HTML file (from pasted text or file upload) which contains HTML form controls and converts them to Aspx format. ApsXer is especially useful if you have many form controls that need to be converted.

Sample: the following HTML:

&amp;lt;input type="text" id="field1"&amp;gt;


Becomes this in Aspx:


&amp;lt;asp:TextBox id="field1" runat= "server"&amp;gt;&amp;lt;/asp:TextBox&amp;gt;
&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=141182" width="1" height="1"&gt;</description></item><item><title>HOWTO: ColSpan and RowSpan in Asp:GridView Controls</title><link>http://www.dotnetjunkies.com/WebLog/joshuagough/archive/2006/06/23/141038.aspx</link><pubDate>Fri, 23 Jun 2006 13:57:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:141038</guid><dc:creator>JoshuaGough</dc:creator><slash:comments>2</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/joshuagough/comments/141038.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/joshuagough/commentrss.aspx?PostID=141038</wfw:commentRss><description>Sometimes you need to do some spanning in tables rendered as part of a GridView. I'm still not sure GridView is absolutely necessary for what I'm doing here. Perhaps the "built in sorting" capability is not all its cooked up to be and I can roll my own but in any case, here's a way to do it:&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;

Here is the sample table to produce:

&lt;table&gt;

&lt;tr&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;Thumb&lt;/td&gt;
    &lt;td&gt;Title&lt;/td&gt;
    &lt;td&gt;Count&lt;/td&gt;
    &lt;td&gt;User Name&lt;/td&gt;
    &lt;td&gt;Time Left&lt;/td&gt;
    &lt;td&gt;Actions&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
    &lt;td rowspan="2"&gt;&lt;br /&gt;660523&lt;/td&gt;
	&lt;td rowspan="2"&gt;&lt;br /&gt;[ img ]&lt;br /&gt;&lt;/td&gt;
    &lt;td colspan="4"&gt;The title is pretty long and wraps because of that.&lt;/td&gt;
    &lt;td rowspan="2"&gt;[actions]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
    &lt;td&gt;&amp;nbsp;&lt;/td&gt;
    &lt;td&gt;50&lt;/td&gt;
    &lt;td&gt;Bob Seller&lt;/td&gt;
    &lt;td&gt;0d56m&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
    &lt;td rowspan="2"&gt;&lt;br /&gt;447993&lt;/td&gt;
    &lt;td rowspan="2"&gt;&lt;br /&gt;[ img ]&lt;br /&gt;&lt;/td&gt;
    &lt;td colspan="4"&gt;The title is pretty long and wraps because of that.&lt;/td&gt;
    &lt;td rowspan="2"&gt;[actions]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
    &lt;td&gt;&amp;nbsp;&lt;/td&gt;
    &lt;td&gt;3&lt;/td&gt;
    &lt;td&gt;Mike Seller&lt;/td&gt;
    &lt;td&gt;1d6m&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;


In the page or control with your GridView instance, hook into the RowDataBound event:

&lt;pre&gt;
     protected void ctlItems_RowDataBound(object sender, GridViewRowEventArgs e)
        {        
            if (e.Row.RowIndex &gt; -1)
            {
                ctlItems.RearrangeCells(e.Row, 2);
            }
        }
&lt;/pre&gt;

The RerrangeCells method looks like:

&lt;pre&gt;
        public void RearrangeCells(GridViewRow sourceRow, int cellIndexToStretchFrom)
        {
            GridViewRow rowToAdd = CreateRow(sourceRow.RowIndex+1
                + RearrangeCellsVisitCount, -1,
                DataControlRowType.EmptyDataRow,
                DataControlRowState.Normal);

            GridViewUtil.MakeBookendsAndStretchCell(sourceRow,
                rowToAdd, cellIndexToStretchFrom);

            HeaderRow.Parent.Controls.AddAt(sourceRow.RowIndex+1
                + RearrangeCellsVisitCount, rowToAdd);            

            // Increment the visit count 
            RearrangeCellsVisitCount++;
        }
        /// 
        /// Used to track the offset for adding rows to the grid
        /// 
        private int RearrangeCellsVisitCount = 1;
&lt;/pre&gt;

Finally, the GridViewUtil class looks as follows:

&lt;pre&gt;
    /// 
    /// Provides helper methods for modifying the constituent TableCells of GridView rows.
    /// 
    public static class GridViewUtil
    {
        public enum SpanModiciationTypeEnum
        {
            ColumnSpan,
            RowSpan
        }

        public static void ExpandCellSpan(GridViewRow row, int[] cellIndicesToModifySpanFor,
            int spanOffset, SpanModiciationTypeEnum spanType)
        {
            foreach (int index in cellIndicesToModifySpanFor)
            {
                TableCell cell = row.Cells[index];
                switch (spanType)
                {
                    case SpanModiciationTypeEnum.ColumnSpan:
                        cell.ColumnSpan += spanOffset; 
                        break;
                    case SpanModiciationTypeEnum.RowSpan:
                        cell.RowSpan += spanOffset;
                        break;
                }
            }
        }

        public static void MoveCells(GridViewRow sourceRow, GridViewRow targetRow, int startIndex,
            int endIndex)
        {
            if (endIndex &gt; sourceRow.Cells.Count)
            {
                throw new InvalidOperationException("MoveCells cannot execute because the sourceRow contains fewer columns than the specified endIndex: "
                     + sourceRow.Cells.Count + ", " + endIndex);
            }

            TableCell[] cells = new TableCell[endIndex - startIndex];
            int count = endIndex - startIndex;

            for (int i = 0; i 

&lt;h3&gt;Explanation&lt;/h3&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=141038" width="1" height="1"&gt;</description></item><item><title>Placeholders for string.Format() in URLs in an XMLSiteMap.sitemap file?</title><link>http://www.dotnetjunkies.com/WebLog/joshuagough/archive/2006/06/20/140831.aspx</link><pubDate>Tue, 20 Jun 2006 14:47:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:140831</guid><dc:creator>JoshuaGough</dc:creator><slash:comments>1</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/joshuagough/comments/140831.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/joshuagough/commentrss.aspx?PostID=140831</wfw:commentRss><description>I've read a lot about XmlSiteMapProvider. It's nice to be able to put URLs in an XML file and bind them dynamically. But, URLs often need query string parameters appended to them so that they can do something like initiate an action. For example, you may have a grid with items like:&lt;br&gt;&lt;br&gt;[ Unique ID ] [ Title&amp;nbsp; ] [ Details ] [ Popup Actions Menu ]&lt;br&gt;[ 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ] [ Item ] [ Great! ] [&amp;nbsp;&amp;nbsp;&amp;nbsp; { Send to Friend, View Details, Search Google } ]&lt;br&gt;&lt;br&gt;Imagine that Popup Actions Menu is an instance of asp:Menu and is bound to a sitemap provider that creates a popout menu based on the current row in the grid.&lt;br&gt;&lt;br&gt;In each case, Send to Friend, View Details, and Search Google will have associated URLs, but will require parameters to be appended.&lt;br&gt;&lt;br&gt;What is the best way to achieve this in asp.net 2.0?&lt;br&gt;&lt;br&gt;I thought that I could store the "format string" of the URL as the URL property in the XML file, and then in pre render, just cycle through and update the URL properties of each node. Then I read that the nodes are read only. I haven't tried it yet, so I'm wondering if others have done something similar.&lt;br&gt;&lt;br&gt;I would like to use asp:Menu because it does a nice thing: it pops the menu _within the available screen real estate_ as best it can. If you scrunch your screen down to 400 pixels wide, it will pop it way over to the left in order to have it viewable. This is very nice, and a lot of commercial controls don't do this, especially with their fancy "ComboBox" or "Styled List Box" controls. &lt;br&gt;I also want to build on top of the security trimming available in the sitemap provider.&lt;br&gt;&lt;br&gt;&lt;span&gt;Update: Quick Start Info Addresses This&lt;br&gt;&lt;br&gt;&lt;/span&gt;If you didn't know better, you could accuse me of stealing the first line of the QuickStart section about this topic! Check it out:&lt;br&gt;&lt;br&gt;http://asp.net/QuickStart/aspnet/doc/navigation/sitenavapi.aspx&lt;br&gt;&lt;br&gt;"The navigation data contained in web.sitemap that is consumed by the XmlSiteMapProvider is static - the data is loaded into memory and stored as read-only data. However, many sites have a navigation structure that is parameterized based on querystring values."&lt;br&gt;&lt;br&gt;Further on:&lt;br&gt;&lt;br&gt;"The Site Navigation feature exposes the SiteMapResolve event on the SiteMapProvider base class. An event subscription can be made using either SiteMap.SiteMapResolve or directly against individual providers using SiteMap.Provider.SiteMapResolve. The return value from the event is a SiteMapNode instance. In your event handler you can write custom logic to create a hierarchy of SiteMapNode instances. This logic can modify the properties on each SiteMapNode so that properties like URL and Title reflect additional information based on data taken from the querystring."&lt;span&gt;&lt;br&gt;&lt;br&gt;I'll try this!&lt;br&gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=140831" width="1" height="1"&gt;</description></item><item><title>DotNetNuke Module Developer's Workshop Live DVD</title><link>http://www.dotnetjunkies.com/WebLog/joshuagough/archive/2006/06/18/140740.aspx</link><pubDate>Sun, 18 Jun 2006 23:17:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:140740</guid><dc:creator>JoshuaGough</dc:creator><slash:comments>1</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/joshuagough/comments/140740.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/joshuagough/commentrss.aspx?PostID=140740</wfw:commentRss><description>&lt;h3&gt;&lt;span&gt;DotNetNuke Developer's Workshop Virtual Appliance&lt;/span&gt;&lt;/h3&gt;
Virtual machines have been around for a long time. For desktop
operating systems, the most well known software is VMWare. Microsoft
also provides Virtual PC and Virtual Server. VMWare hosts a directory
of "Virtual Appliances" that you can download at no cost. These VMWare
images come fully loaded with software that is often configured for a
very specific niche. It could be for networking, content management,
customer relationship management, etc. Some are configured as
development appilances. An example of this is the rPath LAMP Appliance:&lt;br&gt;
&lt;a href="http://www.vmware.com/vmtn/appliances/directory/465"&gt;&lt;br&gt;
http://www.vmware.com/vmtn/appliances/directory/465&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;h4&gt;Description of rBuilder LAMP Appliance&lt;/h4&gt;
&lt;blockquote&gt;
The LAMP Appliance brings the best of breed Web application tools
together in one easily-deployable form factor. From the Apache Web
server, to your choice of databases (MySQL and PostgreSQL), to the
three preeminent scripting languages (Perl, PHP, and Python), the
Linux-based LAMP Appliance gives you the foundation for the
database-backed Web application of your choice.&lt;br&gt;
  &lt;br&gt;
rBuilder from rPath is the first platform for creating and maintaining
Linux-based software appliances. Software appliances give customers all
the benefits of an locally-hosted application without the hassles of
integration and operating system maintenance -- the hallmark of
Software as a Service (SaaS).&lt;br&gt;
  &lt;br&gt;
rBuilder transforms Linux from being "just another port" for
application developers to being a strategic element of a
subscription-based business model, making it possible to reach customer
you could never reach before.
&lt;/blockquote&gt;
&lt;h4&gt;Definition of Live CD from WikiPedia&lt;/h4&gt;Another related term is "Live CD", which is also popular in the Linux
community. See&lt;a href="http://en.wikipedia.org/wiki/LiveCD"&gt;
http://en.wikipedia.org/wiki/LiveCD&lt;/a&gt;. The description of
a Live CD is as follows:&lt;br&gt;
&lt;br&gt;&lt;blockquote&gt;
A live CD (or liveCD) is an operating system (usually containing other
software as well) stored on a bootable CD or DVD that can be run
directly from the CD or DVD drive, without installing into permanent
memory, such as a hard drive. (A live CD does not alter the current
operating system or files unless the user specifically requests it.)
The system returns to its previous state when the live CD is ejected
and the computer is rebooted. It does this by placing the files which
typically would be stored on a hard drive, into temporary memory, such
as a ram disk. In fact, a hard drive is not needed at all. However,
this does cut down on the RAM available to applications, reducing
performance somewhat. 256 MB - 512 MB of RAM is recommended, but some
live CDs do fine with less.
&lt;/blockquote&gt;
&lt;h4&gt;Electing to Install a Live CD ISO Within VMWare of Virtual PC Instead of Burning it to CD&lt;/h4&gt;
Rather than burn a CD, many people elect to simply download the ISO
image, then use VMWare, Virtual PC, QEMU, etc and boot the guest
operating system within a self-contained execution environment from the
comfort of their own familiar desktop operating system. This can be a
very useful and unobtrusive way to explore a new system or collection
of unfamiliar software packages without having to invest a lot of time
and effort into configuration and setup. With download speeds ever
increading, the proposition is becoming more and more attractive.&lt;br&gt;&lt;h4&gt;Microsoft's Employment of the Live DVD Tactic at MSDN Events&lt;/h4&gt;Similarly, Microsoft has been known given out "Live DVDs" after MSDN
events that have been fully loaded with time-limited versions of VS
2005 Beta, SQL Server 2005 Beta, etc. Of course, these were running in
Virtual PC, not VMWare. I have attended ASP.NET Training courses at
Hewlett Packard that use this approach to training. When we sat down,
we booted up our Virtual PCs and went off to work in our virtual Visual
Studios.&lt;br&gt;
&lt;br&gt;&lt;h4&gt;Ripe Marketing Opportunities for this Tactic within the DotNetNuke Community&lt;/h4&gt;I know a lot of people who are very eager to learn how to develop
DotNetNuke modules. I know others who have no interest in developing
DotNetNuke modules, but are very interested in what DotNetNuke could do
for them. I see both of these as perfect opportunities for DotNetNuke
appliances, both as training resources for developers and as marketing
vehicles for prospective users. In the case of developers, a DotNetNuke
appliance could be fully loaded with all sorts of valuable resources
and open source software. For prospective users, one could foresee
different types of tailored portal installations that could be given to
users either in person or via web download. Users could then experiment
with DNN to their heart's content. As DNN undergoes more
"ajaxification", one could even argue that DNN is a good candidate for
personal information management as a&amp;nbsp;"Portable Application". *&lt;br&gt;
&lt;br&gt;&lt;h4&gt;Idea Proposal: DotNetNuke Module Developer's Workshop Live DVD&lt;/h4&gt;Regarding the first scenario, What I propose is a DotNetNuke
Module Developer's Live DVD. This DVD would have all the essential DotNetNuke software preloaded and configured with supporting code generation tools and documentation, free skins, videos, etc.&lt;br&gt;
&lt;br&gt;
But, that's where I stop because this is a Microsoft universe ruled by EULAs that prevent operating system software distribution. Well,
it's not really where I stopped. I've already begun to do it as a proof of concept. I've installed Windows XP
within VMWare and loaded it up and installed all of the following
software:&lt;br&gt;
&lt;br&gt;
C:\Documents and Settings\Developer\Desktop\Core Downloads&lt;br&gt;
│&amp;nbsp;&amp;nbsp; DotNetNuke_4.3.0_StarterKit.vsi&lt;br&gt;
│&amp;nbsp;&amp;nbsp; DotNetNuke_4.3.0_Source.zip&lt;br&gt;
│&amp;nbsp;&amp;nbsp; Module Upgrade Wizard.zip&lt;br&gt;
│&amp;nbsp;&amp;nbsp; vwdsetup.exe&lt;br&gt;
│&lt;br&gt;
├───Code Generation Tools&lt;br&gt;
│&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CodeSmith
2.6 Freeware.zip&lt;br&gt;
│&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; My
Generation 115.exe&lt;br&gt;
│&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; My
Generation Introduction Flash Movie.exe&lt;br&gt;
│&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
AtGenSDK.zip&lt;br&gt;
│&lt;br&gt;
├───Seabury Design Videos&lt;br&gt;
│&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Seabury_Intro.zip&lt;br&gt;
│&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Seabury_Lesson1.zip&lt;br&gt;
│&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Seabury_Lesson2.zip&lt;br&gt;
│&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Seabury_Lesson3.zip&lt;br&gt;
│&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Seabury_Lesson4.zip&lt;br&gt;
│&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Seabury_Lesson5.zip&lt;br&gt;
│&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Seabury_Lesson6.zip&lt;br&gt;
│&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Seabury_Lesson7.zip&lt;br&gt;
│&lt;br&gt;
└───TrainCert Videos&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
dotnetnuke3_portal_Security.zip&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
traincert1.zip&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
traincert2-over.zip&lt;br&gt;
&lt;br&gt;&lt;h4&gt;The 4.03.00 Starter Kit Installation Process Went Smoothly for the Most Part&lt;/h4&gt;I then installed the vwdsetup.exe, which installed the .NET Framework
2.0, SQL 2005 Express, and Visual Web Developer Express. After that, I
ran the Starter Kit and then created a brand new DotNetNuke WebSite
project. Within minutes, after a few glitches, I was running DotNetNuke
in a fully isolated and self-contained VM. But, I guess I'd be breaking
the law if I offerred up my VM on an FTP site for anyone reading this
to download.&lt;br&gt;
&lt;br&gt;&lt;h4&gt;Bluesky Scenario&lt;/h4&gt;Ultimately, I would love to have a VM configured top to bottom with
DotNetNuke goodies. Additionally, it would be preloaded with Visual
Studio solutions that contain skeleton code files as well as complete
solutions to development exercises that can be presented in
classroom-type sessions. The ultimate goal would be to train people in
a classroom session with the slogan being, "Take it with you", since
they could bring their knowledge and code home with them.&lt;br&gt;
&lt;br&gt;In this scenario, the flow of events would be something like:&lt;br&gt;&lt;ul&gt;&lt;li&gt;Build Live DVDs with VMWare with fully exectuable stack&lt;/li&gt;&lt;li&gt;Distribute them during informal classroom sessions in which attendees bring their own laptop machines&lt;/li&gt;&lt;li&gt;Perform classroom training&lt;/li&gt;&lt;li&gt;Attendees go home with the complete stack and thus don't need to do any manual installation of their own to play around later.&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Feedback and Opinions Sought&lt;/h4&gt;That's where I'm looking for ideas for getting around this. First, does
anyone else think this is a valuable idea? Second, would there be
legimate ways of doing this? Would redistributing a time-limited
version of a Microsoft operating system be legal? Or, might Microsoft
be open to sponsoring some type of event like this? So far as I've seen
Wine and ReactOS are not reliable enough at this time for a 100%
Microsoft-OS free environment.&lt;br&gt;
&lt;br&gt;&lt;h4&gt;Alternative Tactics&lt;/h4&gt;In the absence of a legal solution, this is where Mono and Linux become
ever more attractive. Since the "complete stack" of DNN-related
software does not fully depend on Microsoft, thanks to the elegant
design patterns used in the DNN core, the most limiting factor becomes
the lack of a fully capable Visual Basic .NET compiler for Mono. That
was the last I knew. Please correct me if I'm wrong on that.&lt;br&gt;&lt;br&gt;Lacking a top-to-bottom executable solution, the last alternative would be something like:&lt;br&gt;&lt;ul&gt;&lt;li&gt;Build Live DVDs with VMWare with fully exectuable stack&lt;/li&gt;&lt;li&gt;&lt;span&gt;Builds Companion CDs with just the free software and simple step-by-step instructions for repeating the install.&lt;/span&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Distribute them during informal classroom sessions in which attendees bring their own laptop machines&lt;/li&gt;&lt;li&gt;Perform classroom training&lt;/li&gt;&lt;li&gt;Collect Live DVDs at the end of the session&lt;/li&gt;&lt;li&gt;&lt;span&gt;Attendees go home with free software on the CDs&lt;/span&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;* Portable Applications are apps that&amp;nbsp;fit on a thumbdrive. If
DNN
were capable of running completely on Linux, then it could most likely
run within DamnSmallLinux or some other mini Linux distribution. See&lt;a href="http://portableapps.com/"&gt; http://portableapps.com/&lt;/a&gt;
and &lt;a href="http://www.damnsmalllinux.org/"&gt;http://www.damnsmalllinux.com.&lt;/a&gt;&lt;br&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=140740" width="1" height="1"&gt;</description></item></channel></rss>