<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-794886976212517673</id><updated>2011-08-04T00:10:28.858-07:00</updated><category term='sharepoint 2010'/><category term='c#'/><category term='jquery'/><category term='.net'/><category term='tfs 2010'/><category term='web services'/><category term='ajax'/><category term='moss 2007'/><category term='visual studio 2010'/><title type='text'>.NET-aholic</title><subtitle type='html'>ramblings of my obsession with the framework and all things related.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dotnetaholic.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/794886976212517673/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://dotnetaholic.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Robert Sweeney</name><uri>http://www.blogger.com/profile/03264862215219721349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_cnkw8aBBTA0/ScJ67dPy1MI/AAAAAAAAAa8/uZAwsO9sg2U/S220/IMG_0062.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-794886976212517673.post-4098046114460234129</id><published>2010-07-26T12:17:00.000-07:00</published><updated>2010-07-26T12:20:38.059-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sharepoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='tfs 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2010'/><title type='text'>Team Foundation Server 2010 Links</title><content type='html'>&lt;p&gt;&lt;span style="font-family:verdana;"&gt;The past couple of days I've been working with a customer on their TFS 2010 implementation.  During this process I've ran across some pretty good information.  Below is a list of links and a brief description.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;Team Foundation Installation Guide for Visual Studio 2010&lt;/strong&gt;&lt;br /&gt;Great help document for TFS installation planning.&lt;br /&gt;&lt;/span&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2d531219-2c39-4c69-88ef-f5ae6ac18c9f&amp;amp;displaylang=en"&gt;&lt;span style="font-family:verdana;"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=2d531219-2c39-4c69-88ef-f5ae6ac18c9f&amp;amp;displaylang=en&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;strong&gt;Configuring SharePoint Server 2010 for Dashboard Compatibility with TFS 2010&lt;/strong&gt;&lt;br /&gt;TFS ships with Windows SharePoint Service v3.0.  This blog topic discusses how to configure TFS 2010 and SharePoint 2010 to work with each other.&lt;br /&gt;&lt;/span&gt;&lt;a href="http://blogs.msdn.com/b/team_foundation/archive/2010/03/06/configuring-sharepoint-server-2010-beta-for-dashboard-compatibility-with-tfs-2010-beta2-rc.aspx"&gt;&lt;span style="font-family:verdana;"&gt;http://blogs.msdn.com/b/team_foundation/archive/2010/03/06/configuring-sharepoint-server-2010-beta-for-dashboard-compatibility-with-tfs-2010-beta2-rc.aspx&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;strong&gt;Integrate SharePoint 2010 with TFS 2010&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://blog.hinshelwood.com/archive/2010/05/03/integrate-sharepoint-2010-with-team-foundation-server-2010.aspx"&gt;&lt;span style="font-family:verdana;"&gt;http://blog.hinshelwood.com/archive/2010/05/03/integrate-sharepoint-2010-with-team-foundation-server-2010.aspx&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;strong&gt;Microsoft Visual Studio Scrum 1.0&lt;/strong&gt;&lt;br /&gt;Microsoft’s new Scrum Process Template for TFS.&lt;br /&gt;&lt;/span&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/en-us/59ac03e3-df99-4776-be39-1917cbfc5d8e"&gt;&lt;span style="font-family:verdana;"&gt;http://visualstudiogallery.msdn.microsoft.com/en-us/59ac03e3-df99-4776-be39-1917cbfc5d8e&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;strong&gt;Scrum for Team System Process Template v3.0&lt;/strong&gt;&lt;br /&gt;Pretty useful Scrum Process Template for TFS by EMC Consulting.  Much more detailed than the Microsoft Visual Studio Scrum 1.0 process template.&lt;br /&gt;&lt;/span&gt;&lt;a href="http://www.scrumforteamsystem.com/version-3/process-template-x64"&gt;&lt;span style="font-family:verdana;"&gt;http://www.scrumforteamsystem.com/version-3/process-template-x64&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;strong&gt;Team Foundation Server Power Tools&lt;/strong&gt;&lt;br /&gt;This is a very useful set of tools for modifying your TFS environment.&lt;br /&gt;&lt;/span&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/en-us/3e8c9b68-6e39-4577-b9b7-78489b5cb1da"&gt;&lt;span style="font-family:verdana;"&gt;http://visualstudiogallery.msdn.microsoft.com/en-us/3e8c9b68-6e39-4577-b9b7-78489b5cb1da&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;strong&gt;TFS Integration Platform&lt;/strong&gt;&lt;br /&gt;This is a platform that allows for the integration of external systems with TFS.&lt;br /&gt;&lt;/span&gt;&lt;a href="http://tfsintegration.codeplex.com/"&gt;&lt;span style="font-family:verdana;"&gt;http://tfsintegration.codeplex.com/&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;strong&gt;Urban Turtle&lt;/strong&gt;&lt;br /&gt;This is a very cool tool for TFS that makes managing your Scrum process simple.&lt;/span&gt;&lt;a href="http://urbanturtle.com/?item=home"&gt;&lt;span style="font-family:verdana;"&gt;http://urbanturtle.com/?item=home&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/794886976212517673-4098046114460234129?l=dotnetaholic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetaholic.blogspot.com/feeds/4098046114460234129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotnetaholic.blogspot.com/2010/07/team-foundation-server-2010-links.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/794886976212517673/posts/default/4098046114460234129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/794886976212517673/posts/default/4098046114460234129'/><link rel='alternate' type='text/html' href='http://dotnetaholic.blogspot.com/2010/07/team-foundation-server-2010-links.html' title='Team Foundation Server 2010 Links'/><author><name>Robert Sweeney</name><uri>http://www.blogger.com/profile/03264862215219721349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_cnkw8aBBTA0/ScJ67dPy1MI/AAAAAAAAAa8/uZAwsO9sg2U/S220/IMG_0062.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-794886976212517673.post-241302007851674935</id><published>2010-04-07T14:45:00.000-07:00</published><updated>2010-04-07T14:48:53.502-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>Microsoft Ajax Minifier</title><content type='html'>I ran into this tool today.  Been serveral times in the past where javascript minification has been asked.  I've used a couple of other commonly used tools, however, this one seems promising.  will look at using it in the future.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.asp.net/ajaxLibrary/AjaxMinDocumentation.ashx"&gt;http://www.asp.net/ajaxLibrary/AjaxMinDocumentation.ashx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/794886976212517673-241302007851674935?l=dotnetaholic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetaholic.blogspot.com/feeds/241302007851674935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotnetaholic.blogspot.com/2010/04/microsoft-ajax-minifier.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/794886976212517673/posts/default/241302007851674935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/794886976212517673/posts/default/241302007851674935'/><link rel='alternate' type='text/html' href='http://dotnetaholic.blogspot.com/2010/04/microsoft-ajax-minifier.html' title='Microsoft Ajax Minifier'/><author><name>Robert Sweeney</name><uri>http://www.blogger.com/profile/03264862215219721349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_cnkw8aBBTA0/ScJ67dPy1MI/AAAAAAAAAa8/uZAwsO9sg2U/S220/IMG_0062.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-794886976212517673.post-7301088067047207545</id><published>2009-04-09T22:50:00.001-07:00</published><updated>2009-04-09T22:50:26.042-07:00</updated><title type='text'>Application Architecture Guide 2.0</title><content type='html'>&lt;p&gt;Very interesting read.&amp;#160; Discusses everything from development technologies to platforms to design patterns.&amp;#160; Must read for someone new to the Microsoft stack.&amp;#160; Contributions from highly respected Microsoft MVPs.&lt;/p&gt;  &lt;p&gt;&lt;a title="http://apparchguide.codeplex.com/" href="http://apparchguide.codeplex.com/"&gt;http://apparchguide.codeplex.com/&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/794886976212517673-7301088067047207545?l=dotnetaholic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetaholic.blogspot.com/feeds/7301088067047207545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotnetaholic.blogspot.com/2009/04/application-architecture-guide-20.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/794886976212517673/posts/default/7301088067047207545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/794886976212517673/posts/default/7301088067047207545'/><link rel='alternate' type='text/html' href='http://dotnetaholic.blogspot.com/2009/04/application-architecture-guide-20.html' title='Application Architecture Guide 2.0'/><author><name>Robert Sweeney</name><uri>http://www.blogger.com/profile/03264862215219721349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_cnkw8aBBTA0/ScJ67dPy1MI/AAAAAAAAAa8/uZAwsO9sg2U/S220/IMG_0062.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-794886976212517673.post-1310950546443711961</id><published>2009-04-01T23:05:00.001-07:00</published><updated>2009-04-01T23:05:42.253-07:00</updated><title type='text'>Free eBook: ASP.NET MVC 1.0</title><content type='html'>&lt;p&gt;Not necessarily an entire book but the entire first chapter.&amp;#160; Scott Guthrie and friends have published the first chapter of their new book “ASP.NET MVC 1.0” free for download.&lt;/p&gt;  &lt;p&gt;&lt;a title="http://weblogs.asp.net/scottgu/archive/2009/03/10/free-asp-net-mvc-ebook-tutorial.aspx" href="http://weblogs.asp.net/scottgu/archive/2009/03/10/free-asp-net-mvc-ebook-tutorial.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2009/03/10/free-asp-net-mvc-ebook-tutorial.aspx&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/794886976212517673-1310950546443711961?l=dotnetaholic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetaholic.blogspot.com/feeds/1310950546443711961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotnetaholic.blogspot.com/2009/04/free-ebook-aspnet-mvc-10.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/794886976212517673/posts/default/1310950546443711961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/794886976212517673/posts/default/1310950546443711961'/><link rel='alternate' type='text/html' href='http://dotnetaholic.blogspot.com/2009/04/free-ebook-aspnet-mvc-10.html' title='Free eBook: ASP.NET MVC 1.0'/><author><name>Robert Sweeney</name><uri>http://www.blogger.com/profile/03264862215219721349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_cnkw8aBBTA0/ScJ67dPy1MI/AAAAAAAAAa8/uZAwsO9sg2U/S220/IMG_0062.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-794886976212517673.post-2376191577082794661</id><published>2009-03-22T00:46:00.001-07:00</published><updated>2009-03-22T01:51:09.243-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='web services'/><title type='text'>jQuery: Leveraging Element Data</title><content type='html'>&lt;p&gt;A common task when dealing with UI is displaying data.&amp;#160; When it comes to HTML and persisting data, things can get pretty interesting and ugly.&amp;#160; &lt;a href="http://www.jquery.com" target="_blank"&gt;jQuery&lt;/a&gt; makes attaching data to HTML elements very simple.&amp;#160; Using the data method, you are able associate data with an element, given a key (this allows for multiple pieces of data to be associated to a single element).&amp;#160; Mix this with jQuery’s powerful selectors, we are able to create some interesting user experiences.&amp;#160; I’ve put together a &lt;a href="http://www.dotnetaholic.com/samples/jQueryElementData/" target="_blank"&gt;sample&lt;/a&gt; in which we retrieve a series of Users and available Security Roles, from a .NET Web Service.&amp;#160; The UI allows a user to drag various users into their appropriate groups.&lt;/p&gt; &lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;  &lt;pre class="csharpcode"&gt;$(msg.d).each(function() {&lt;br /&gt;  $(&lt;span class="str"&gt;&amp;quot;&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;&lt;/span&gt;).addClass(&lt;span class="str"&gt;&amp;quot;item&amp;quot;&lt;/span&gt;).text(&lt;span class="kwrd"&gt;this&lt;/span&gt;.Username).appendTo(&lt;span class="str"&gt;&amp;quot;#userList&amp;quot;&lt;/span&gt;).data(&lt;span class="str"&gt;&amp;quot;__jsonData&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;this&lt;/span&gt;);&lt;br /&gt;});&lt;br /&gt;$(&lt;span class="str"&gt;&amp;quot;.user .item&amp;quot;&lt;/span&gt;).draggable({ revert: &lt;span class="kwrd"&gt;true&lt;/span&gt; });&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Once we get our response back from the GetUsers call, we iterate through each of the items in the response and create the HTML elements.&amp;#160; In doing so we additionally associate the JSON object with the new html element, using the key of “__jsonData”.&amp;#160; Finally, we make all the newly created elements draggable.&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;$(msg.d).each(function() {&lt;br /&gt;  var newContainer = $(&lt;span class="str"&gt;&amp;quot;&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;&lt;/span&gt;).addClass(&lt;span class="str"&gt;&amp;quot;container role&amp;quot;&lt;/span&gt;).appendTo(&lt;span class="str"&gt;&amp;quot;body&amp;quot;&lt;/span&gt;).data(&lt;span class="str"&gt;&amp;quot;__jsonData&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;this&lt;/span&gt;);&lt;br /&gt;  $(&lt;span class="str"&gt;&amp;quot;&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;&lt;/span&gt;).addClass(&lt;span class="str"&gt;&amp;quot;role-title&amp;quot;&lt;/span&gt;).text(&lt;span class="kwrd"&gt;this&lt;/span&gt;.Name).appendTo(newContainer);&lt;br /&gt;});&lt;br /&gt;$(&lt;span class="str"&gt;&amp;quot;.role&amp;quot;&lt;/span&gt;).droppable({&lt;br /&gt;  drop: function(&lt;span class="kwrd"&gt;event&lt;/span&gt;, ui) {&lt;br /&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (ui.draggable.hasClass(&lt;span class="str"&gt;&amp;quot;item&amp;quot;&lt;/span&gt;)) {&lt;br /&gt;      var dropData = ui.draggable.data(&lt;span class="str"&gt;&amp;quot;__jsonData&amp;quot;&lt;/span&gt;);&lt;br /&gt;      $(&lt;span class="str"&gt;&amp;quot;&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;&lt;/span&gt;).addClass(&lt;span class="str"&gt;&amp;quot;item&amp;quot;&lt;/span&gt;).appendTo($(&lt;span class="kwrd"&gt;this&lt;/span&gt;).removeClass(&lt;span class="str"&gt;&amp;quot;over&amp;quot;&lt;/span&gt;)).text(dropData.Username).data(&lt;span class="str"&gt;&amp;quot;__jsonData&amp;quot;&lt;/span&gt;, dropData);&lt;br /&gt;    }&lt;br /&gt;  },&lt;br /&gt;  over: function(&lt;span class="kwrd"&gt;event&lt;/span&gt;, ui) { &lt;span class="kwrd"&gt;if&lt;/span&gt; (ui.draggable.hasClass(&lt;span class="str"&gt;&amp;quot;item&amp;quot;&lt;/span&gt;)) $(&lt;span class="kwrd"&gt;this&lt;/span&gt;).addClass(&lt;span class="str"&gt;&amp;quot;over&amp;quot;&lt;/span&gt;); },&lt;br /&gt;  &lt;span class="kwrd"&gt;out&lt;/span&gt;: function(&lt;span class="kwrd"&gt;event&lt;/span&gt;, ui) { &lt;span class="kwrd"&gt;if&lt;/span&gt; (ui.draggable.hasClass(&lt;span class="str"&gt;&amp;quot;item&amp;quot;&lt;/span&gt;)) $(&lt;span class="kwrd"&gt;this&lt;/span&gt;).removeClass(&lt;span class="str"&gt;&amp;quot;over&amp;quot;&lt;/span&gt;); }&lt;br /&gt;});&lt;br /&gt;$(&lt;span class="str"&gt;&amp;quot;.role&amp;quot;&lt;/span&gt;).draggable({ handle: &lt;span class="str"&gt;&amp;quot;.role-title&amp;quot;&lt;/span&gt; });&lt;br /&gt;$(&lt;span class="str"&gt;&amp;quot;.user&amp;quot;&lt;/span&gt;).draggable({ handle: &lt;span class="str"&gt;&amp;quot;.title&amp;quot;&lt;/span&gt; });&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Next, we make our call to the GetRoles web service.&amp;#160; Once, the call returns we again create the new HTML elements.&amp;#160; Each container will invoked the droppable.&amp;#160; We will feed it several parameters, mainly to signify if the draggable element is of the “item” type.&amp;#160; Since we’ve made the containers draggable, the drop target needs to know whether or not is a container or an item.&lt;/p&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;$(&lt;span class="str"&gt;&amp;quot;#report&amp;quot;&lt;/span&gt;).click(function() {&lt;br /&gt;  var reportString = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;  $(&lt;span class="str"&gt;&amp;quot;.role&amp;quot;&lt;/span&gt;).each(function() {&lt;br /&gt;    reportString += $(&lt;span class="kwrd"&gt;this&lt;/span&gt;).data(&lt;span class="str"&gt;&amp;quot;__jsonData&amp;quot;&lt;/span&gt;).Name + &lt;span class="str"&gt;&amp;quot;\r\n-------------\r\n&amp;quot;&lt;/span&gt;;&lt;br /&gt;    $(&lt;span class="kwrd"&gt;this&lt;/span&gt;).children(&lt;span class="str"&gt;&amp;quot;.item&amp;quot;&lt;/span&gt;).each(function() {&lt;br /&gt;      var itemData = $(&lt;span class="kwrd"&gt;this&lt;/span&gt;).data(&lt;span class="str"&gt;&amp;quot;__jsonData&amp;quot;&lt;/span&gt;);&lt;br /&gt;      reportString += itemData.FirstName + &lt;span class="str"&gt;&amp;quot; &amp;quot;&lt;/span&gt; + itemData.LastName + &lt;span class="str"&gt;&amp;quot; (&amp;quot;&lt;/span&gt; + itemData.Username + &lt;span class="str"&gt;&amp;quot;)\r\n&amp;quot;&lt;/span&gt;;&lt;br /&gt;    });&lt;br /&gt;    reportString += &lt;span class="str"&gt;&amp;quot;\r\n&amp;quot;&lt;/span&gt;;&lt;br /&gt;  });&lt;br /&gt;&lt;br /&gt;  alert(reportString);&lt;br /&gt;});&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Finally, we want to summarize the data, once the user is done putting their users into the appropriate groups.&amp;#160; I’ve simply added a click handler to the “report” button.&amp;#160; This simple compiles a string of all roles and the users that were defined for the role.&amp;#160; Here we can see that we are putting the summary together based on attributes that are not displayed in the UI anywhere.&amp;#160; We are yanking this information out of the JSON object, that we stored in the jQuery data for the given elements.&amp;#160; We could easily add the User data to the Role.Users array and ship them off to an update web service.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;So, as you can see, the jQuery element data allows you to create a pretty flexible UI without having to do anything like create hidden fields and/or complicate your HTML, simply to support tracking UI and data as one unit.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.dotnetaholic.com/samples/downloads/JsonSample.zip"&gt;Download Source&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/794886976212517673-2376191577082794661?l=dotnetaholic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetaholic.blogspot.com/feeds/2376191577082794661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotnetaholic.blogspot.com/2009/03/jquery-leveraging-element-data.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/794886976212517673/posts/default/2376191577082794661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/794886976212517673/posts/default/2376191577082794661'/><link rel='alternate' type='text/html' href='http://dotnetaholic.blogspot.com/2009/03/jquery-leveraging-element-data.html' title='jQuery: Leveraging Element Data'/><author><name>Robert Sweeney</name><uri>http://www.blogger.com/profile/03264862215219721349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_cnkw8aBBTA0/ScJ67dPy1MI/AAAAAAAAAa8/uZAwsO9sg2U/S220/IMG_0062.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-794886976212517673.post-7621548533942579832</id><published>2009-03-19T09:53:00.000-07:00</published><updated>2009-03-19T10:00:41.074-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='moss 2007'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>Elevated Permissions with SPContext</title><content type='html'>Old post I moved over.&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;I have created a provisioning wizard to control where and how sites are created. I do this through a web part that is added to the STS#1 definition. To prevent users from accessing the site settings menu everyone is setup at the top level as a "Reader". So obviously if i want to create a site, within the users context, i need to elevate their permission. There is plenty of code out there that demostrates the SPSecurity.RunWithElevatedPrivileges, however, if you are to use the SPContext while inside a call to RunWithElevatedPrivileges it does not elevate the current context permission. You will have to open a new site. Examples below:&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;// Doesn't Work&lt;/span&gt;&lt;br /&gt;SPSecurity.RunWithElevatedPrivileges(&lt;span class="kwrd"&gt;delegate&lt;/span&gt; {&lt;br /&gt;    SPWeb web = SPContext.Current.Web {&lt;br /&gt;&lt;br /&gt;    &lt;span class="rem"&gt;// provision site &amp;amp; do other jazz&lt;/span&gt;&lt;br /&gt;    web.Webs.Add(...);&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;// Better&lt;/span&gt;&lt;br /&gt;SPSecurity.RunWithElevatedPrivileges(&lt;span class="kwrd"&gt;delegate&lt;/span&gt; {&lt;br /&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (SPSite site = &lt;span class="kwrd"&gt;new&lt;/span&gt; SPSite(SPContext.Current.Web.Url)) {&lt;br /&gt;        &lt;span class="kwrd"&gt;using&lt;/span&gt; (SPWeb web = site.OpenWeb()) {&lt;br /&gt;            &lt;span class="rem"&gt;// provision site &amp;amp; do other jazz&lt;/span&gt;&lt;br /&gt;            web.Webs.Add(...);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;});&lt;/pre&gt;&lt;br /&gt;Odd but works for me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/794886976212517673-7621548533942579832?l=dotnetaholic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetaholic.blogspot.com/feeds/7621548533942579832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotnetaholic.blogspot.com/2009/03/elevated-permissions-with-spcontext.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/794886976212517673/posts/default/7621548533942579832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/794886976212517673/posts/default/7621548533942579832'/><link rel='alternate' type='text/html' href='http://dotnetaholic.blogspot.com/2009/03/elevated-permissions-with-spcontext.html' title='Elevated Permissions with SPContext'/><author><name>Robert Sweeney</name><uri>http://www.blogger.com/profile/03264862215219721349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_cnkw8aBBTA0/ScJ67dPy1MI/AAAAAAAAAa8/uZAwsO9sg2U/S220/IMG_0062.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-794886976212517673.post-7082300192063901848</id><published>2009-03-17T23:51:00.000-07:00</published><updated>2009-03-18T23:43:02.181-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='web services'/><title type='text'>ASP.NET Web Services, JSON, and jQuery</title><content type='html'>I've recent found jQuery as a very powerful tool. It simplifies a lot of how the DOM is traversed. Additionally, it makes writing JavaScript more consistent and bringing a lot of what newer languages contain right from the get go. With jQuery you can really build powerful web applications without having to spend hours writing JavaScript to do some very trivial operations.&lt;br /&gt;&lt;br /&gt;One of many things that jQuery simplifies is making AJAX calls. Invoke call to the “ajax” method, wire up a delegate to handle various response types and presto--instant Ajax. These calls are especially easy when arguments and return values are of basic data types (string, int, float, etc). Passing in the data attribute a JSON representation of the parameters on the web service (e.g. { parameterName: parameterValue} ) . Though, sometimes it is necessary to pass complex data types to a web service. Here I’ll illustrate how to do this.&lt;br /&gt;&lt;br /&gt;Below I've create some very simple page level web services. Services defined within a pages scope are automatically ScriptServices and do not require the denotation. I'll explain more on ScriptServices later.&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;  [WebMethod()]&lt;br /&gt;  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; List&amp;lt;Post&amp;gt; GetPosts()&lt;br /&gt;  {&lt;br /&gt;    List&amp;lt;Post&amp;gt; posts = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;Post&amp;gt;();&lt;br /&gt;    posts.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; Post(&lt;span class="str"&gt;"JSON Rules!"&lt;/span&gt;, &lt;span class="str"&gt;"Some body text"&lt;/span&gt;, &lt;span class="str"&gt;"Johnnie Beam"&lt;/span&gt;));&lt;br /&gt;    posts.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; Post(&lt;span class="str"&gt;".NET Rocks!"&lt;/span&gt;, &lt;span class="str"&gt;"More body text"&lt;/span&gt;, &lt;span class="str"&gt;"Jim Daniels"&lt;/span&gt;));&lt;br /&gt;    posts.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; Post(&lt;span class="str"&gt;"jQuery Pwns!"&lt;/span&gt;, &lt;span class="str"&gt;"Some more body text"&lt;/span&gt;, &lt;span class="str"&gt;"Jack Walker"&lt;/span&gt;));&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; posts;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  [WebMethod()]&lt;br /&gt;  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; CreatePost(Post post)&lt;br /&gt;  {&lt;br /&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;"server received: "&lt;/span&gt; + post.Title;&lt;br /&gt;  }&lt;/pre&gt;&lt;br /&gt;The GetPosts method returns a list of Post objects. While CreatePost takes a Post object as an argument, simply returning a string. The Post class for these objects is identified below.&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Post&lt;br /&gt;{&lt;br /&gt;  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Title { get; set; }&lt;br /&gt;  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Body { get; set; }&lt;br /&gt;  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Author { get; set; }&lt;br /&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;public&lt;/span&gt; Post(&lt;span class="kwrd"&gt;string&lt;/span&gt; title, &lt;span class="kwrd"&gt;string&lt;/span&gt; body, &lt;span class="kwrd"&gt;string&lt;/span&gt; author)&lt;br /&gt;  {&lt;br /&gt;    &lt;span class="kwrd"&gt;this&lt;/span&gt;.Title = title;&lt;br /&gt;    &lt;span class="kwrd"&gt;this&lt;/span&gt;.Body = body;&lt;br /&gt;    &lt;span class="kwrd"&gt;this&lt;/span&gt;.Author = author;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;public&lt;/span&gt; Post() { }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;One thing to note is, I've explicitly identified an empty, zero argument constructor. Reason that this is necessary is due to the way .NET handles the service request. It takes the data and creates a new instances of all arguments and assigns values appropriately (this process is known as Deserialization).&lt;br /&gt;&lt;br /&gt;Now that we have our sample services, it's time that we invoke them. Below I've created a sample that will do just that.&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://www.w3.org/1999/xhtml"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;WebService Sample&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text/javascript"&lt;/span&gt; &lt;span class="attr"&gt;language&lt;/span&gt;&lt;span class="kwrd"&gt;="javascript"&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;="scripts/jquery-1.3.2.js"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &amp;lt;script type=&lt;span class="str"&gt;"text/javascript"&lt;/span&gt; language=&lt;span class="str"&gt;"javascript"&lt;/span&gt; src=&lt;span class="str"&gt;"scripts/json2.js"&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;  &amp;lt;script type=&lt;span class="str"&gt;"text/javascript"&lt;/span&gt; language=&lt;span class="str"&gt;"javascript"&lt;/span&gt;&amp;gt;&lt;br /&gt;    $(&lt;span class="str"&gt;"document"&lt;/span&gt;).ready(&lt;span class="kwrd"&gt;function&lt;/span&gt;() {&lt;br /&gt;      &lt;span class="rem"&gt;// wire up save click&lt;/span&gt;&lt;br /&gt;      $(&lt;span class="str"&gt;"#save"&lt;/span&gt;).click(&lt;span class="kwrd"&gt;function&lt;/span&gt;() {&lt;br /&gt;        Save($(&lt;span class="str"&gt;"#title"&lt;/span&gt;).val(), $(&lt;span class="str"&gt;"#body"&lt;/span&gt;).val(), $(&lt;span class="str"&gt;"#author"&lt;/span&gt;).val());&lt;br /&gt;      });&lt;br /&gt;&lt;br /&gt;      &lt;span class="rem"&gt;// load listings from server&lt;/span&gt;&lt;br /&gt;      $.ajax({&lt;br /&gt;        type: &lt;span class="str"&gt;"POST"&lt;/span&gt;,&lt;br /&gt;        contentType: &lt;span class="str"&gt;"application/json; charset=utf-8"&lt;/span&gt;,&lt;br /&gt;        url: &lt;span class="str"&gt;"webservice.aspx/GetPosts"&lt;/span&gt;,&lt;br /&gt;        data: &lt;span class="str"&gt;"{ }"&lt;/span&gt;,&lt;br /&gt;        dataType: &lt;span class="str"&gt;"json"&lt;/span&gt;,&lt;br /&gt;        success: &lt;span class="kwrd"&gt;function&lt;/span&gt;(msg) {&lt;br /&gt;          $(msg.d).each(&lt;span class="kwrd"&gt;function&lt;/span&gt;() {&lt;br /&gt;            &lt;span class="kwrd"&gt;var&lt;/span&gt; newElement = $(&lt;span class="str"&gt;"&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;"&lt;/span&gt;);&lt;br /&gt;            newElement.append(&lt;span class="str"&gt;"&amp;lt;h3&amp;gt;"&lt;/span&gt; + &lt;span class="kwrd"&gt;this&lt;/span&gt;.Title + &lt;span class="str"&gt;"&amp;lt;/h3&amp;gt;"&lt;/span&gt;);&lt;br /&gt;            newElement.append(&lt;span class="str"&gt;"&amp;lt;p&amp;gt;"&lt;/span&gt; + &lt;span class="kwrd"&gt;this&lt;/span&gt;.Body + &lt;span class="str"&gt;"&amp;lt;/p&amp;gt;"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;            $(&lt;span class="str"&gt;"#postListing"&lt;/span&gt;).append(newElement);&lt;br /&gt;          });&lt;br /&gt;        }&lt;br /&gt;      });&lt;br /&gt;    });&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;function&lt;/span&gt; Save(title, body, author) {&lt;br /&gt;      &lt;span class="kwrd"&gt;var&lt;/span&gt; parameters = { post: { Title: title, Body: body, Author: author} };&lt;br /&gt;&lt;br /&gt;      $.ajax({&lt;br /&gt;        type: &lt;span class="str"&gt;"POST"&lt;/span&gt;,&lt;br /&gt;        url: &lt;span class="str"&gt;"webservice.aspx/CreatePost"&lt;/span&gt;,&lt;br /&gt;        data: JSON.stringify(parameters),&lt;br /&gt;        contentType: &lt;span class="str"&gt;"application/json; charset=utf-8"&lt;/span&gt;,&lt;br /&gt;        dataType: &lt;span class="str"&gt;"json"&lt;/span&gt;,&lt;br /&gt;        success: &lt;span class="kwrd"&gt;function&lt;/span&gt;(msg) {&lt;br /&gt;          $(&lt;span class="str"&gt;"#result"&lt;/span&gt;).text(msg.d);&lt;br /&gt;        }&lt;br /&gt;      });&lt;br /&gt;    }&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="form1"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;span&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="result"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;span&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;h2&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Create Post&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;h2&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;span&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Title: &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;span&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text"&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="title"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;span&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Body: &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;span&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;textarea&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="body"&lt;/span&gt; &lt;span class="attr"&gt;rows&lt;/span&gt;&lt;span class="kwrd"&gt;="3"&lt;/span&gt; &lt;span class="attr"&gt;cols&lt;/span&gt;&lt;span class="kwrd"&gt;="30"&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;textarea&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;span&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Author: &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;span&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text"&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="author"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;button&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="save"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Save&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;button&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="postListing"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;h2&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Post Listing&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;h2&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Before I explain what is going on here, let’s take a little bit of a dive into ScriptServices. ASP.NET AJAX introduces the concept of ScriptServices. ScriptServices can be called in a much more simplistic manner, as compared to SOAP services. SOAP Services contain a large amount of data that is expressed in XML. Making SOAP very verbose and impacting overall performance. ScriptServices are an attempt at making web service more RESTful. REST services streamline the process by using the existing HTTP infrastructure, rather than complicated SOAP messages; typically using JSON as data format. There is a lot that can be said on this topic--I won't go into that discussion here.&lt;br /&gt;&lt;br /&gt;Back to the sample--Once the DOM is ready we setup the "Save" click handler and then make a call to the GetPosts method. Here we signify that the resulting data type will be a JSON object. This is possible because we've identified the content type of the request to be "application/json; charset=utf-8". This tells ASP.NET, this message needs to be handled as a ScriptService.&lt;br /&gt;&lt;br /&gt;When the call successfully completes, the JSON object from the web service is passed to the Success handler (as a note the JSON object is actually wrapped in a "d" object. My assumption here is that this is done for future compatibility. Potentially the ScriptService, in the future, may pass along various information from the server.) Here we simply create a new DIV elements for all items returned, displaying the title and body.&lt;br /&gt;&lt;br /&gt;When the user clicks on the Save button, the values of the various input fields are passed into the Save function. The save function first creates a JSON object that identifies the parameters to be sent back to the ScriptService. Then an ajax call is made. This call looks very similar to the GetPosts call, however, the data property is very much different. Here we perform a stringify on the parameters object. The stringify call takes a JSON object and turns into its string representation.&lt;br /&gt;&lt;br /&gt;NOTE: stringify method comes from the json2.js file. More information on this can be found &lt;a href="http://www.json.org/js.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;TIP: A technique that I use when I'm not sure of the data being passed to the success event, I will stringify the msg.d object and pass that into an alert. This provides a good way of visualizing what the object looks like.&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;alert(JSON.stringify(msg.d));&lt;/pre&gt;&lt;br /&gt;Here we've demonstrated that you can take a complex data type and bring it down from a service, additionally, you can build a JSON object from JavaScript and send it into a .NET ScriptService. This paradigm makes web 2.0 style development effortless.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/794886976212517673-7082300192063901848?l=dotnetaholic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetaholic.blogspot.com/feeds/7082300192063901848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotnetaholic.blogspot.com/2009/03/test.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/794886976212517673/posts/default/7082300192063901848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/794886976212517673/posts/default/7082300192063901848'/><link rel='alternate' type='text/html' href='http://dotnetaholic.blogspot.com/2009/03/test.html' title='ASP.NET Web Services, JSON, and jQuery'/><author><name>Robert Sweeney</name><uri>http://www.blogger.com/profile/03264862215219721349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_cnkw8aBBTA0/ScJ67dPy1MI/AAAAAAAAAa8/uZAwsO9sg2U/S220/IMG_0062.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-794886976212517673.post-8865933349483538377</id><published>2009-02-09T22:53:00.000-08:00</published><updated>2009-02-09T23:14:05.690-08:00</updated><title type='text'>So much to learn, so little time</title><content type='html'>&lt;span style="font-family:verdana;"&gt;So these past couple of weeks, I've been trying to catch up on my reading list.  Boy in the past couple of months this thing has grown.   Being a Microsoft consultant this list is pretty biased.&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Parallel Extensions&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;ASP.NET MVC&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Silverlight&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Windows Azure&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;.NET Services&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;SQL Data Services&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Live Services&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;VS2010 and .NET 4.0&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;In order to help myself push through this list I've decided to blog on my research.&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/794886976212517673-8865933349483538377?l=dotnetaholic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetaholic.blogspot.com/feeds/8865933349483538377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotnetaholic.blogspot.com/2009/02/so-much-to-learn-so-little-time.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/794886976212517673/posts/default/8865933349483538377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/794886976212517673/posts/default/8865933349483538377'/><link rel='alternate' type='text/html' href='http://dotnetaholic.blogspot.com/2009/02/so-much-to-learn-so-little-time.html' title='So much to learn, so little time'/><author><name>Robert Sweeney</name><uri>http://www.blogger.com/profile/03264862215219721349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_cnkw8aBBTA0/ScJ67dPy1MI/AAAAAAAAAa8/uZAwsO9sg2U/S220/IMG_0062.jpg'/></author><thr:total>0</thr:total></entry></feed>
