﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
  <channel>
    <title>James Tsai's Blog</title>
    <description>SharePoint | ASP.NET | C# | .NET vNext</description>
    <link>http://www.jamestsai.net/Blog/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 2.6.0.5</generator>
    <language>en-GB</language>
    <blogChannel:blogRoll>http://www.jamestsai.net/Blog/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink>
    <dc:creator>My name</dc:creator>
    <dc:title>James Tsai's Blog</dc:title>
    <geo:lat>0.000000</geo:lat>
    <geo:long>0.000000</geo:long>
    <item>
      <title>SharePoint Provider-Hosted App - 401 Unauthorized error on clientContext.ExecuteQuery()</title>
      <description>&lt;p&gt;So you are ready to develop a SharePoint app and have followed this &lt;a title="How to: Create high-trust apps for SharePoint 2013 using the server-to-server protocol (advanced topic)" href="http://msdn.microsoft.com/en-us/library/fp179901.aspx" target="_blank"&gt;MSDN article&lt;/a&gt;&amp;nbsp;to get everything set up. F5 in visual studio, clicked Trust It to "Do you trust &amp;lt;name of your app&amp;gt;?" from SharePoint, and then you are getting&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The remote server returned an error: (401) Unauthorized&lt;/p&gt;
&lt;p&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://www.jamestsai.net/Blog/image.axd?picture=%2f2013%2f04%2f401+on+clinetContext.ExecuteQuery.png" alt="image" width="449" height="175" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Chances are the IssuerId in provider-hosted application web.config is listed as a UPPER CASE Guid string.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For example&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;lt;add key="IssuerId" value="983802AC-C7A9-4B50-8100-2C6E2773B9CF" /&amp;gt;&lt;/p&gt;
&lt;p&gt;To resolve above issue, all you needed to do is to make it a lowercase Guid string&lt;/p&gt;
&lt;p&gt;&amp;lt;add key="IssuerId" value="983802ac-c7a9-4b50-8100-2c6e2773b9cf" /&amp;gt;&lt;/p&gt;
&lt;p&gt;Also, make sure the IssuerID in web.config match the one you see from Get-SPTrustedSecurityTokenIssuer SharePoint Powershell command. (If you don't see anything listed from this command, go back to steps in&amp;nbsp;&lt;a title="How to: Create high-trust apps for SharePoint 2013 using the server-to-server protocol (advanced topic)" href="http://msdn.microsoft.com/en-us/library/fp179901.aspx" target="_blank"&gt;MSDN article&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;I hope this helps&lt;/p&gt;
&lt;p&gt;James&lt;/p&gt;</description>
      <link>http://www.jamestsai.net/Blog/post/SharePoint-Provider-Hosted-App-401-Unauthorized-error-on-clientContextExecuteQuery().aspx</link>
      <comments>http://www.jamestsai.net/Blog/post/SharePoint-Provider-Hosted-App-401-Unauthorized-error-on-clientContextExecuteQuery().aspx#disqus_thread</comments>
      <guid>http://www.jamestsai.net/Blog/post.aspx?id=001cb290-da28-45cc-9b5c-e67a82c756e7</guid>
      <pubDate>Wed, 17 Apr 2013 03:18:00 -1300</pubDate>
      <category>SharePoint 2013</category>
      <dc:publisher>James</dc:publisher>
      <pingback:server>http://www.jamestsai.net/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.jamestsai.net/Blog/post.aspx?id=001cb290-da28-45cc-9b5c-e67a82c756e7</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.jamestsai.net/Blog/trackback.axd?id=001cb290-da28-45cc-9b5c-e67a82c756e7</trackback:ping>
      <wfw:comment>http://www.jamestsai.net/Blog/post/SharePoint-Provider-Hosted-App-401-Unauthorized-error-on-clientContextExecuteQuery().aspx#disqus_thread</wfw:comment>
      <wfw:commentRss>http://www.jamestsai.net/Blog/syndication.axd?post=001cb290-da28-45cc-9b5c-e67a82c756e7</wfw:commentRss>
    </item>
    <item>
      <title>Offline install of Office Developer Tools for Visual Studio 2012</title>
      <description>&lt;p&gt;Last week Microsoft has released the RTM version of Office Developer Tools for Visual Studio 2012. This is a very exciting news for those SharePoint 2013 developers who has been using Preview 2 version of the tool (made to GA on Nov/2012) since SharePoint 2013 RTM.&lt;/p&gt;
&lt;p&gt;For those who don&amp;rsquo;t need to worry about the offline installation and just want to install it on one or two development machines &amp;ndash; here is the link to download and install directly through Microsoft&amp;rsquo;s Web Platform Installer (Web PI) &lt;a href="http://aka.ms/OfficeDevToolsForVS2012"&gt;http://aka.ms/OfficeDevToolsForVS2012&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;However, please continue reading if you like to:&lt;/p&gt;
&lt;p&gt;1. keep a shadow copy of whole installation package along with all the pre-requirements components&lt;/p&gt;
&lt;p&gt;2. able to install Office Developer Tools for Visual Studio 2012 in one or more offline environments&lt;/p&gt;
&lt;p&gt;3. save some internet bandwidth for your enterprise network&lt;/p&gt;
&lt;p&gt;Here is what you need to do:&lt;/p&gt;
&lt;p&gt;*You will need a PC with Microsoft Web Platform Installer 4.5 installed and connected to the internet to download the initial copy of whole package.&lt;/p&gt;
&lt;h2&gt;Step 1. Download the Package through WebpiCmd.exe command (Online)&lt;/h2&gt;
&lt;p&gt;From the Web PI wizard you can see there are multiple dependency components needs to be installed as part of Microsoft Office Developer Tools for Visual Studio 2012&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=image.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://www.jamestsai.net/Blog/image.axd?picture=image_thumb.png" alt="image" width="454" height="316" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=image_1.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://www.jamestsai.net/Blog/image.axd?picture=image_thumb_1.png" alt="image" width="449" height="484" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here is the WebpiCmd command that you can use to avoid&amp;nbsp; to download each these dependencies one by one manually.&lt;/p&gt;
&lt;p&gt;*WebpiCmd is locate at &amp;ldquo;C:\Program Files\Microsoft\Web Platform Installer&amp;rdquo; on the machine that has Web PI 4.5 installed&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;WebpiCmd.exe /offline /products:OfficeToolsForVS2012RTW /Path:C:\YourFolder\OfficeToolsForVS2012RTW&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Where is &lt;strong&gt;OfficeToolsForVS2012RTW&lt;/strong&gt; product id come from? Web PI gets all products id from &lt;a title="http://www.microsoft.com/web/webpi/4.5/webproductlist.xml" href="http://www.microsoft.com/web/webpi/4.5/webproductlist.xml"&gt;http://www.microsoft.com/web/webpi/4.5/webproductlist.xml&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can go there and find &lt;strong&gt;Office 15 RTW Tools&lt;/strong&gt; section and see its product id. Preview 2 product id can also be found if you search &lt;strong&gt;Office 15 GA Tools &lt;/strong&gt;in the same list.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=Untitled2.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Untitled2" src="http://www.jamestsai.net/Blog/image.axd?picture=Untitled2_thumb.png" alt="Untitled2" width="454" height="621" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This will download all the necessary components automatically for OfficeToolsForVS2012RTW product to be installed correctly. WebpiCmd will also create a nice folder structure under OfficeToolsForVS2012RTW (*specified in the command above) to store each of these installers.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=Untitled4.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Untitled4" src="http://www.jamestsai.net/Blog/image.axd?picture=Untitled4_thumb.png" alt="Untitled4" width="454" height="355" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Step 2. Move downloaded folder and Install the package though WebpiCmd.exe command (Offline)&lt;/h2&gt;
&lt;p&gt;Now you can move OfficeToolsForVS2012RTW folder to any development machine that you wish to install, use WebpiCmd&amp;nbsp; tool in your OfficeToolsForVS2012RTW\installers folder to execute following command.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;C:\YourFolder\OfficeToolsForVS2012RTW\installers\WebpiCmd.exe /install /products:OfficeToolsForVS2012RTW&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=Untitled.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Untitled" src="http://www.jamestsai.net/Blog/image.axd?picture=Untitled_thumb.png" alt="Untitled" width="454" height="696" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Repeat Step 2 if you wish to install Office Developer Tools for Visual Studio 2012 on different machine.&lt;/p&gt;
&lt;p&gt;Here you have it. I Hope this helps!&lt;/p&gt;
&lt;p&gt;James&lt;/p&gt;</description>
      <link>http://www.jamestsai.net/Blog/post/Offline-install-of-Office-Developer-Tools-for-Visual-Studio-2012.aspx</link>
      <comments>http://www.jamestsai.net/Blog/post/Offline-install-of-Office-Developer-Tools-for-Visual-Studio-2012.aspx#disqus_thread</comments>
      <guid>http://www.jamestsai.net/Blog/post.aspx?id=20bfa03d-9738-43fe-afe8-ca5bdda7431b</guid>
      <pubDate>Tue, 12 Mar 2013 14:16:00 -1300</pubDate>
      <category>SharePoint 2013</category>
      <dc:publisher>James</dc:publisher>
      <pingback:server>http://www.jamestsai.net/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.jamestsai.net/Blog/post.aspx?id=20bfa03d-9738-43fe-afe8-ca5bdda7431b</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.jamestsai.net/Blog/trackback.axd?id=20bfa03d-9738-43fe-afe8-ca5bdda7431b</trackback:ping>
      <wfw:comment>http://www.jamestsai.net/Blog/post/Offline-install-of-Office-Developer-Tools-for-Visual-Studio-2012.aspx#disqus_thread</wfw:comment>
      <wfw:commentRss>http://www.jamestsai.net/Blog/syndication.axd?post=20bfa03d-9738-43fe-afe8-ca5bdda7431b</wfw:commentRss>
    </item>
    <item>
      <title>How to use ASP.NET AJAX UpdatePanel in ModalPopup</title>
      <description>&lt;p&gt;
This design not only shows you how to use ASP.NET UpdatePanel inside ModalPopup, it also shows a way of having multiple dynamically created controls that act as triggers to show ModalPopup, and the content of ModalPopup will change depending on the control that triggered the Popup. Then user can perform an action that does partial update inside the ModalPopup. You will only need one ModalPopupExtender control by using this design. 
&lt;/p&gt;
&lt;p&gt;
The following diagram shows how the controls are structured in the .aspx page 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/HowtouseA.NETAJAXUpdatePanelinModalPopup_A633/UpdatePanel_In_ModalPopup_Design_2.jpg" class="lightbox"&gt;&lt;img style="display: inline; border: 0px" src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/HowtouseA.NETAJAXUpdatePanelinModalPopup_A633/UpdatePanel_In_ModalPopup_Design_thumb.jpg" border="0" alt="UpdatePanel_In_ModalPopup_Design" title="UpdatePanel_In_ModalPopup_Design" width="404" height="252" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
As you can see here, we have an UpdatePanel inside the ModalPopup, and the ModalPopup is in the another UpdatePanel along with other dynamic controls on page. 
&lt;/p&gt;
&lt;p&gt;
The next diagram shows the actual look of the page. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/HowtouseA.NETAJAXUpdatePanelinModalPopup_A633/UpdatePanel_In_ModalPopup__2.jpg" class="lightbox"&gt;&lt;img style="display: inline; border: 0px" src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/HowtouseA.NETAJAXUpdatePanelinModalPopup_A633/UpdatePanel_In_ModalPopup__thumb.jpg" border="0" alt="UpdatePanel_In_ModalPopup_" title="UpdatePanel_In_ModalPopup_" width="404" height="252" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
 
&lt;/p&gt;
&lt;p&gt;
Red, Blue, and Yellow are the ASP.NET LinkButton controls that are created dynamically during the &lt;strong&gt;Page_Load() &lt;/strong&gt;event. When the user click on one of these LinkButton controls, a ModalPopup shows up, with a DropDownList control and two Button Controls inside it. 
&lt;/p&gt;
&lt;p&gt;
The DropDownList control in ModalPopup shows the list of products for the specific colour (LinkButton) that user has clicked. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/HowtouseA.NETAJAXUpdatePanelinModalPopup_A633/UpdatePanel_In_ModalPopup_DDL_2.jpg" class="lightbox"&gt;&lt;img style="display: inline; border: 0px" src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/HowtouseA.NETAJAXUpdatePanelinModalPopup_A633/UpdatePanel_In_ModalPopup_DDL_thumb.jpg" border="0" alt="UpdatePanel_In_ModalPopup_DDL" title="UpdatePanel_In_ModalPopup_DDL" width="404" height="246" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
The server-side event fired and updates the label control text, after the &amp;ldquo;Choose&amp;rdquo; button has been clicked. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/HowtouseA.NETAJAXUpdatePanelinModalPopup_A633/UpdatePanel_In_ModalPopup_DDL_PartialUpdate_2.jpg" class="lightbox"&gt;&lt;img style="display: inline; border: 0px" src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/HowtouseA.NETAJAXUpdatePanelinModalPopup_A633/UpdatePanel_In_ModalPopup_DDL_PartialUpdate_thumb.jpg" border="0" alt="UpdatePanel_In_ModalPopup_DDL_PartialUpdate" title="UpdatePanel_In_ModalPopup_DDL_PartialUpdate" width="404" height="246" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;div class="code"&gt;&lt;br /&gt;&lt;span class="asp"&gt;&amp;lt;%@ Page Language="C#" AutoEventWireup="true" CodeFile="ModalPopupExample.aspx.cs" Inherits="ModalPopupExample" %&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;span class="asp"&gt;&amp;lt;%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="html"&gt;DOCTYPE&lt;/span&gt; &lt;span class="attr"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;PUBLIC&lt;/span&gt; &lt;span class="kwrd"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN"&lt;/span&gt; &lt;span class="kwrd"&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&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;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="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;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;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;style&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text/css"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;        .modalBackground { &lt;br /&gt;            background-color:#333333; &lt;br /&gt;            filter:alpha(opacity=70); &lt;br /&gt;            opacity:0.7; &lt;br /&gt;        } &lt;br /&gt;        .modalPopup { &lt;br /&gt;            background-color:#FFFFFF; &lt;br /&gt;            border-width:1px; &lt;br /&gt;            border-style:solid; &lt;br /&gt;            border-color:#CCCCCC; &lt;br /&gt;            padding:1px; &lt;br /&gt;            width:300px; &lt;br /&gt;            Height:200px; &lt;br /&gt;        }    &lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;style&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;asp:ScriptManager&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="ScriptManager1"&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;asp:ScriptManager&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;asp:UpdatePanel&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="udpOutterUpdatePanel"&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;ContentTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&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;div&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="divControlContainer"&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;&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;input&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="dummy"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="button"&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;="display: none"&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;br /&gt;&lt;br /&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ajaxToolkit:ModalPopupExtender&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;br /&gt;                        &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="mpeThePopup"&lt;/span&gt; &lt;br /&gt;                        &lt;span class="attr"&gt;TargetControlID&lt;/span&gt;&lt;span class="kwrd"&gt;="dummy"&lt;/span&gt; &lt;br /&gt;                        &lt;span class="attr"&gt;PopupControlID&lt;/span&gt;&lt;span class="kwrd"&gt;="pnlModalPopUpPanel"&lt;/span&gt; &lt;br /&gt;                        &lt;span class="attr"&gt;BackgroundCssClass&lt;/span&gt;&lt;span class="kwrd"&gt;="modalBackground"&lt;/span&gt;                        &lt;br /&gt;                        &lt;span class="attr"&gt;DropShadow&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &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;asp:Panel&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="pnlModalPopUpPanel"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;CssClass&lt;/span&gt;&lt;span class="kwrd"&gt;="modalPopup"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&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;asp:UpdatePanel&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="udpInnerUpdatePanel"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="Server"&lt;/span&gt; &lt;span class="attr"&gt;UpdateMode&lt;/span&gt;&lt;span class="kwrd"&gt;="Conditional"&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;ContentTemplate&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;p&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;asp:DropDownList&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="ddlProducts"&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;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:DropDownList&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;                                &lt;br /&gt;                                &lt;span class="attr"&gt;&amp;amp;nbsp;&lt;/span&gt; &lt;br /&gt;                                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Button&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="btnChooseProduct"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Choose"&lt;/span&gt; &lt;span class="attr"&gt;onclick&lt;/span&gt;&lt;span class="kwrd"&gt;="btnChooseProduct_Click"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;br /&gt;                                &lt;span class="attr"&gt;&amp;amp;nbsp;&lt;/span&gt; &lt;br /&gt;                                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Button&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="btnCancelModalPopup"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Cancel"&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;P&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;p&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;asp:Label&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="lblText"&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;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:Label&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;p&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;ContentTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&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;Triggers&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;asp:AsyncPostBackTrigger&lt;/span&gt; &lt;span class="attr"&gt;ControlID&lt;/span&gt;&lt;span class="kwrd"&gt;="btnChooseProduct"&lt;/span&gt; &lt;span class="attr"&gt;EventName&lt;/span&gt;&lt;span class="kwrd"&gt;="Click"&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;Triggers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&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;asp:UpdatePanel&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;asp:Panel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&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;ContentTemplate&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;asp:UpdatePanel&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;/div&gt; 
&lt;p&gt;
In the code above it shows the ModalPopExtender that &amp;ldquo;pnlModalPopUpPanel&amp;rdquo; is attached to has a hidden TargetControl (&amp;ldquo;dummy&amp;rdquo; button). This is because the popup will be shown via server in code behind by calling the ModalPopupExtender &lt;strong&gt;show()&lt;/strong&gt; method. 
&lt;/p&gt;
&lt;p&gt;
&lt;div class="code"&gt;
 
&lt;/p&gt;
&lt;p&gt;
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ModalPopupExample : System.Web.UI.Page &lt;br /&gt;
{ &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Page_Load(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e) &lt;br /&gt;
&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; LinkButton lbtnRed = &lt;span class="kwrd"&gt;new&lt;/span&gt; LinkButton(); &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; LinkButton lbtnBlue = &lt;span class="kwrd"&gt;new&lt;/span&gt; LinkButton(); &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; LinkButton lbtnYellow = &lt;span class="kwrd"&gt;new&lt;/span&gt; LinkButton(); 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lbtnRed.ID = lbtnRed.Text = &amp;quot;Red&amp;quot;; &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; lbtnBlue.ID = lbtnBlue.Text = &amp;quot;Blue&amp;quot;; &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; lbtnYellow.ID = lbtnYellow.Text = &amp;quot;Yellow&amp;quot;; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lbtnRed.Click+=&lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler(lbtn_Click); &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; lbtnBlue.Click+=&lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler(lbtn_Click); &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; lbtnYellow.Click+=&lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler(lbtn_Click); 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; divControlContainer.Controls.Add(lbtnRed); &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; divControlContainer.Controls.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; LiteralControl(&amp;quot;&amp;lt;br/&amp;gt;&amp;quot;)); &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; divControlContainer.Controls.Add(lbtnBlue); &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; divControlContainer.Controls.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; LiteralControl(&amp;quot;&amp;lt;br/&amp;gt;&amp;quot;)); &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; divControlContainer.Controls.Add(lbtnYellow);&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; divControlContainer.Controls.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; LiteralControl(&amp;quot;&amp;lt;br/&amp;gt;&amp;quot;)); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; lbtn_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e) &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="rem"&gt;//Get Event Sender Control &lt;br /&gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LinkButton lbtnSender = (LinkButton)sender; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="rem"&gt;//Clear Previous Saved Values &lt;br /&gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ddlProducts.Items.Clear(); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lblText.Text = &amp;quot;&amp;quot;; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="rem"&gt;//Populate DropDownList Items &lt;br /&gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;for&lt;/span&gt;(&lt;span class="kwrd"&gt;int&lt;/span&gt; i=1; i&amp;lt;10; i++) &lt;br /&gt;
&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; &lt;span class="kwrd"&gt;string&lt;/span&gt; productName = lbtnSender.ID + &amp;quot; Product &amp;quot; + i.ToString(); &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; ddlProducts.Items.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; ListItem(productName, productName)); &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; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="rem"&gt;//Show ModalPopup &lt;br /&gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mpeThePopup.Show(); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; btnChooseProduct_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e) &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="rem"&gt;//Changed Label Control Text &lt;br /&gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lblText.Text = &amp;quot;You have selected &amp;quot; + ddlProducts.SelectedItem.Text; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="rem"&gt;//Show ModalPopup &lt;br /&gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mpeThePopup.Show(); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;
} 
&lt;/p&gt;
&lt;p&gt;
&lt;/div&gt; 
&lt;/p&gt;
&lt;p&gt;
Three LinkButton controls are created In the &lt;strong&gt;Page_Load() &lt;/strong&gt;method, and they are all attached to the same Click event handler &lt;strong&gt;lbtn_Click()&lt;/strong&gt;. &lt;strong&gt;lbtn_Click()&lt;/strong&gt; will check who the sender is when executing, and it loads the DropDownList &amp;ldquo;ddlProducts&amp;rdquo; with corresponding products. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;btnChooseProduct_Click()&lt;/strong&gt; handles the &lt;strong&gt;btnChooseProduct&lt;/strong&gt; click event&amp;nbsp; inside the ModalPopup popup, then this click event triggers partial update to the update panel inside the ModalPopup popup. 
&lt;/p&gt;
&lt;p&gt;
Nothing is new here, but hopefully it will help in some way. 
&lt;/p&gt;
</description>
      <link>http://www.jamestsai.net/Blog/post/How-to-use-ASPNET-AJAX-UpdatePanel-in-ModalPopup.aspx</link>
      <comments>http://www.jamestsai.net/Blog/post/How-to-use-ASPNET-AJAX-UpdatePanel-in-ModalPopup.aspx#disqus_thread</comments>
      <guid>http://www.jamestsai.net/Blog/post.aspx?id=e4dd4c04-afd3-43e1-9135-a2a70775004e</guid>
      <pubDate>Sat, 27 Jun 2009 02:49:00 -1300</pubDate>
      <category>ASP.NET</category>
      <category>Programming</category>
      <dc:publisher>James</dc:publisher>
      <pingback:server>http://www.jamestsai.net/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.jamestsai.net/Blog/post.aspx?id=e4dd4c04-afd3-43e1-9135-a2a70775004e</pingback:target>
      <slash:comments>198</slash:comments>
      <trackback:ping>http://www.jamestsai.net/Blog/trackback.axd?id=e4dd4c04-afd3-43e1-9135-a2a70775004e</trackback:ping>
      <wfw:comment>http://www.jamestsai.net/Blog/post/How-to-use-ASPNET-AJAX-UpdatePanel-in-ModalPopup.aspx#disqus_thread</wfw:comment>
      <wfw:commentRss>http://www.jamestsai.net/Blog/syndication.axd?post=e4dd4c04-afd3-43e1-9135-a2a70775004e</wfw:commentRss>
    </item>
    <item>
      <title>Virtual Earth Map Control on SharePoint</title>
      <description>&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/VirtualEarthMapControlonSharePoint_B157/VirtualEarthMapControl_2.png"&gt;&lt;img style="display: inline; border: 0px" src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/VirtualEarthMapControlonSharePoint_B157/VirtualEarthMapControl_thumb.png" border="0" alt="James Tsai .Net SharePoint Blog Virtual Earth Map Control" title="James Tsai .Net SharePoint Blog Virtual Earth Map Control" width="404" height="317" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Well, I finally have some free time to play with it. I know, I am two years late on this topic. But I still wanted to see how Microsoft Virtual Earth Map Control can work together with SharePoint, so I created a control that does following tasks 
&lt;/p&gt;
&lt;h2&gt;1. Read saved locations from SharePoint List&lt;/h2&gt;
&lt;p&gt;
Read saved locations information from SharePoint list. SharePoint list stores location items with Title, Address and Description fields. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/VirtualEarthMapControlonSharePoint_B157/AddressBookSharePointList_2.png"&gt;&lt;img style="display: inline; border: 0px" src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/VirtualEarthMapControlonSharePoint_B157/AddressBookSharePointList_thumb.png" border="0" alt="James Tsai .Net SharePoint Blog Address Book SharePoint List" title="James Tsai .Net SharePoint Blog Address Book SharePoint List" width="354" height="137" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Render all the locations stored in SharePoint list&amp;nbsp;on Virtual Earth Map Control. Virtual earth Map Control is&amp;nbsp;embedded in Content editor web part - there is no need to create a custom web part. 
&lt;/p&gt;
&lt;p&gt;
Display custom created panel control (VEMap Control) on Virtual Earth Map Control.&amp;nbsp;It shows the pushpins, location Id and Titles - user click on the pushpin Id in panel control&amp;nbsp;to see the corresponded location on map 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/VirtualEarthMapControlonSharePoint_B157/VirtualEarthMapControlViewMode_2.png"&gt;&lt;img style="display: inline; border: 0px" src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/VirtualEarthMapControlonSharePoint_B157/VirtualEarthMapControlViewMode_thumb.png" border="0" alt="James Tsai .Net SharePoint Blog Virtual Earth Map Control View Mode" title="James Tsai .Net SharePoint Blog Virtual Earth Map Control View Mode" width="404" height="293" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h2&gt;2. Write to SharePoint List&lt;/h2&gt;
&lt;p&gt;
Display Pushpin Information box when user click on pushpins &amp;ndash; information box contains the custom created HTML with Text boxes and Edit/Save/Cancel action links. 
&lt;/p&gt;
&lt;p&gt;
Push changed value back to SharePoint list via SharePoint list web service (/_vti_bin/lists.asmx) 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/VirtualEarthMapControlonSharePoint_B157/VirtualEarthMapControlEditMode_2.png"&gt;&lt;img style="display: inline; border: 0px" src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/VirtualEarthMapControlonSharePoint_B157/VirtualEarthMapControlEditMode_thumb.png" border="0" alt="James Tsai .Net SharePoint Blog Virtual Earth Map Control Edit Mode" title="James Tsai .Net SharePoint Blog Virtual Earth Map Control Edit Mode" width="404" height="274" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h2&gt;How to do it&lt;/h2&gt;
&lt;h3&gt;Download JavaScript Files&lt;/h3&gt;
&lt;p&gt;
 
&lt;/p&gt;
&lt;p&gt;
I am not going to explain the code I wrote, it is not hard for you to figure out what each function does. Source code can be downloaded from the link below. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/file.axd?file=2009%2f4%2fVirtualEarthMapControl_SharePointExample.zip"&gt;VirtualEarthMapControl_SharePointExample.zip (5.92 kb)&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
It contains five .js files and one .css style file. 
&lt;/p&gt;
&lt;p&gt;
VirutalMapMain.js 
&lt;/p&gt;
&lt;p&gt;
VirtualMapPanel.js 
&lt;/p&gt;
&lt;p&gt;
VirtualMapInfoBox.js 
&lt;/p&gt;
&lt;p&gt;
VirtualMapPushPin.js 
&lt;/p&gt;
&lt;p&gt;
VirtualMapSPC.js&amp;nbsp; (SharePoint web service connection code) 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;PLEASE NOTE&lt;/strong&gt;: These are uncommented code with hard-coded values. &lt;strong&gt;DO NOT&lt;/strong&gt; use them directly. I provide this so that you can see how this can be done, it doesn&amp;rsquo;t necessary show the implementation of best practice.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
The functions in above .js files are pretty self-explained by their name. 
&lt;/p&gt;
&lt;h3&gt;Create a SharePonit List&lt;/h3&gt;
&lt;p&gt;
Create a SharePoint list with following name and fields. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/VirtualEarthMapControlonSharePoint_B157/AddressBookSharePointList_4.png"&gt;&lt;img style="display: inline; border: 0px" src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/VirtualEarthMapControlonSharePoint_B157/AddressBookSharePointList_thumb_1.png" border="0" alt="James Tsai .Net SharePoint Blog Address Book SharePoint List" title="James Tsai .Net SharePoint Blog Address Book SharePoint List" width="354" height="137" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Please keep in mind that SharePoint list and field names in VirutalMapSPC.js were hard-coded. You can change them to map to the list on your SharePoint Site 
&lt;/p&gt;
&lt;h3&gt;Add a Content Editor Web Part to page&lt;/h3&gt;
&lt;p&gt;
On the web part page, add a Content Editor Web Part and insert the following html in Web Part Properties &amp;gt; Source Editor. Make sure the source links of JavaScript and CSS files are match to their saved location. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/VirtualEarthMapControlonSharePoint_B157/ContentEditorWebPart_2.png"&gt;&lt;img style="display: inline; border: 0px" src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/VirtualEarthMapControlonSharePoint_B157/ContentEditorWebPart_thumb.png" border="0" alt="James Tsai .Net SharePoint Blog Content Editor Web Part" title="James Tsai .Net SharePoint Blog Content Editor Web Part" width="404" height="180" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Since Virtual Map Control has to be called during OnLoad event, I use the _spBodyOnLoadFunctionNames.push() to do this. 
&lt;/p&gt;
&lt;p&gt;
&lt;div class="code"&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;charset&lt;/span&gt;&lt;span class="kwrd"&gt;="UTF-8"&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;src&lt;/span&gt;&lt;span class="kwrd"&gt;="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2&amp;amp;mkt=en-us"&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 charset=&lt;span class="str"&gt;"UTF-8"&lt;/span&gt; type=&lt;span class="str"&gt;"text/javascript"&lt;/span&gt; src=&lt;span class="str"&gt;"~/_layouts/1033/virtualmap/VirtualMapSPC.js"&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt; &lt;br /&gt;&amp;lt;script charset=&lt;span class="str"&gt;"UTF-8"&lt;/span&gt; type=&lt;span class="str"&gt;"text/javascript"&lt;/span&gt; src=&lt;span class="str"&gt;"~/_layouts/1033/virtualmap/VirtualMapPanel.js"&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt; &lt;br /&gt;&amp;lt;script charset=&lt;span class="str"&gt;"UTF-8"&lt;/span&gt; type=&lt;span class="str"&gt;"text/javascript"&lt;/span&gt; src=&lt;span class="str"&gt;"~/_layouts/1033/virtualmap/VirtualMapInfoBox.js"&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;    &lt;br /&gt;&amp;lt;script charset=&lt;span class="str"&gt;"UTF-8"&lt;/span&gt; type=&lt;span class="str"&gt;"text/javascript"&lt;/span&gt; src=&lt;span class="str"&gt;"~/_layouts/1033/virtualmap/VirtualMapPushPin.js"&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;    &lt;br /&gt;&amp;lt;script charset=&lt;span class="str"&gt;"UTF-8"&lt;/span&gt; type=&lt;span class="str"&gt;"text/javascript"&lt;/span&gt; src=&lt;span class="str"&gt;"~/_layouts/1033/virtualmap/VirtualMapMain.js"&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;    &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script type=&lt;span class="str"&gt;"text/javascript"&lt;/span&gt;&amp;gt; &lt;br /&gt;_spBodyOnLoadFunctionNames.push(&lt;span class="str"&gt;"GetMap"&lt;/span&gt;); &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; headID = document.getElementsByTagName(&lt;span class="str"&gt;"head"&lt;/span&gt;)[0];         &lt;br /&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; cssNode = document.createElement(&lt;span class="str"&gt;'link'&lt;/span&gt;); &lt;br /&gt;cssNode.type = &lt;span class="str"&gt;'text/css'&lt;/span&gt;; &lt;br /&gt;cssNode.rel = &lt;span class="str"&gt;'stylesheet'&lt;/span&gt;; &lt;br /&gt;cssNode.href = &lt;span class="str"&gt;'/Style Library/temp/virtualmap.css'&lt;/span&gt;; &lt;br /&gt;cssNode.media = &lt;span class="str"&gt;'screen'&lt;/span&gt;; &lt;br /&gt;headID.appendChild(cssNode); &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;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;='myMap'&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;="position:relative; width:600px; height:400px;"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&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;/div&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/VirtualEarthMapControlonSharePoint_B157/ContentEditorWebPartSourceEditor_2.png"&gt;&lt;img style="display: inline; border: 0px" src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/VirtualEarthMapControlonSharePoint_B157/ContentEditorWebPartSourceEditor_thumb.png" border="0" alt="James Tsai .Net SharePoint Blog Content Editor Web Part Source Editor" title="James Tsai .Net SharePoint Blog Content Editor Web Part Source Editor" width="304" height="230" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Save changes, and a Virtual Earth Map Control should be loaded and displayed in Content Editor Web Part with all the data loaded from SharePoint list. 
&lt;/p&gt;
&lt;p&gt;
Let me know if you have any questions, I hope you find this helpful. 
&lt;/p&gt;
</description>
      <link>http://www.jamestsai.net/Blog/post/Virtual-Earth-Map-Control-on-SharePoint.aspx</link>
      <comments>http://www.jamestsai.net/Blog/post/Virtual-Earth-Map-Control-on-SharePoint.aspx#disqus_thread</comments>
      <guid>http://www.jamestsai.net/Blog/post.aspx?id=3a53b4c9-4509-4516-a0c6-49f347344de4</guid>
      <pubDate>Sat, 11 Apr 2009 10:02:00 -1300</pubDate>
      <category>Programming</category>
      <category>SharePoint</category>
      <dc:publisher>James</dc:publisher>
      <pingback:server>http://www.jamestsai.net/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.jamestsai.net/Blog/post.aspx?id=3a53b4c9-4509-4516-a0c6-49f347344de4</pingback:target>
      <slash:comments>67</slash:comments>
      <trackback:ping>http://www.jamestsai.net/Blog/trackback.axd?id=3a53b4c9-4509-4516-a0c6-49f347344de4</trackback:ping>
      <wfw:comment>http://www.jamestsai.net/Blog/post/Virtual-Earth-Map-Control-on-SharePoint.aspx#disqus_thread</wfw:comment>
      <wfw:commentRss>http://www.jamestsai.net/Blog/syndication.axd?post=3a53b4c9-4509-4516-a0c6-49f347344de4</wfw:commentRss>
    </item>
    <item>
      <title>Where do you deploy custom SharePoint web service files to? (.asmx, disco.aspx and wsdl.aspx)</title>
      <description>&lt;p&gt;
Recently someone asked me to troubleshoot the problem he had with the custom web service he created.
&lt;/p&gt;
&lt;p&gt;
He followed the instructions from MSDN article &amp;quot;Walkthrough: Creating a Custom Web Service&amp;quot; and generated MyWebservice.asmx, MyWebservicedisco.aspx and MyWebservicewsdl.aspx files. He also made changes to contract reference and SOAP address in both disco.aspx and wsdl.aspx to provide the necessary redirection and maintain the URL virtualization.
&lt;/p&gt;
&lt;p&gt;
Web service was deployed to 12\TEMPLATE\LAYOUTS in file system and can be viewed from URL http://&lt;strong&gt;&amp;lt;site&amp;gt;/&lt;/strong&gt;_layouts/MyWebservice.asmx or http://&lt;strong&gt;&amp;lt;site&amp;gt;/&amp;lt;subsite&amp;gt;/&lt;/strong&gt;_layouts/MyWebservice.asmx without any issues. 
&lt;/p&gt;
&lt;p&gt;
&amp;quot;Everything looks fine except...&amp;quot; - he said
&lt;/p&gt;
&lt;p&gt;
At this stage I knew what the problem was and his description of the problem confirmed it.
&lt;/p&gt;
&lt;p&gt;
&amp;quot;Everything looks fine except the web service function call returns an incorrect and unexpected result&amp;quot;
&lt;/p&gt;
&lt;p&gt;
Yes, it could be the code logic errors. But I sticked to the one obvious mistake he has made. I told him that &amp;quot;Only deploy your custom web service files to 12\ISAPI (\_vti_bin\) folder unless you know what you are doing&amp;quot;
&lt;/p&gt;
&lt;p&gt;
I have seen this problem many times before from different developers, third party vendor&amp;#39;s and IT supports. They all have their own reasons (wrong reasons) for not to deploy their custom web service files to 12\ISAPI. 
&lt;/p&gt;
&lt;h3&gt;Why _vti_bin folder&lt;/h3&gt; 
&lt;p&gt;

&lt;/p&gt;
&lt;p&gt;
Why all SharePoint OOTB web serivce files are in _vti_bin in the first place?
&lt;/p&gt;
&lt;p&gt;
Because _vti_bin (12\ISAPI) virtual folder has been configured to serve requests differently compared to other virtual folders in the SharePoint site.
&lt;/p&gt;
&lt;p&gt;
Every web service request made to this directory will be parsed by wswsdl.aspx and wsdisco.aspx files in 12\ISAPI. wswsdl.aspx and wsdisco.aspx files then find correspondence wsdl and disco information for web service request and output correct contract reference and SOAP address.
&lt;/p&gt;
&lt;p&gt;
For example when client made a request to \_vti_bin\lists.asmx, wswsdl.aspx and wsdisco.aspx will parse it and look up for listswsdl.aspx and listsdisco.aspx respectively for wsdl and disco information.(modified version of auto-generated .wsdl .disco files)
&lt;/p&gt;
&lt;p&gt;
Without this mechanism (web service request made to any other virtual folder on SharePoint site) the ASP.NET auto-generated disco and wsdl will be used. Since auto-generated disco and wsdl are unaware of the SharePoint service URL virtualization, results returned by web service become unreliable.
&lt;/p&gt;
&lt;h3&gt;Simple test&lt;/h3&gt; 
&lt;p&gt;
1. Go to 12\ISAPI\ and copy lists.asmx, listsdisco.aspx and listswsdl.aspx to 12\TEMPLATE\LAYOUTS\
&lt;/p&gt;
&lt;p&gt;
2. Create a sub-site under any site.
&lt;/p&gt;
&lt;p&gt;
3. Browse lists web service from http://&amp;lt;site&amp;gt;/&amp;lt;sub-site&amp;gt;/_layouts/lists.asmx and http://&amp;lt;site&amp;gt;/&amp;lt;sub-site&amp;gt;/_vti_bin/lists.asmx
&lt;/p&gt;
&lt;p&gt;
4. Open SharePoint Designer and Open sub-site. In Data Source Library &amp;gt; XML Web Services &amp;gt; Connect to a web service..
&lt;/p&gt;
&lt;p&gt;
5. Set-up two web service connections to web services under _layouts/lists.asmx and _vti_bin/lists.asmx with operation GetListCollection.
&lt;/p&gt;
&lt;p&gt;
6. Click on these two data connections and select Show Data.
&lt;/p&gt;
&lt;p&gt;
7. Compare results.
&lt;/p&gt;
&lt;p&gt;
You can easily see that&amp;nbsp; _vti_bin/lists.asmx GetListCollection returns all lists under sub-site but _layouts/lists.asmx returns lists under root site. Imagine what would happen if you have different access permissions for each site level ? Or what if your web service logic is heavily dependent on the running site context? 
&lt;/p&gt;
&lt;h3&gt;Note&lt;/h3&gt; 
&lt;p&gt;
You can always check if your custom web service has maintained correct URL virutalization by viewing its Service Description.
&lt;/p&gt;
&lt;p&gt;
Correct SOAP path.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/WheredidyoudeployyourcustomSharePoi.aspx_F02B/WebServiceCorrectRedirection_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border-width: 0px" src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/WheredidyoudeployyourcustomSharePoi.aspx_F02B/WebServiceCorrectRedirection_thumb.jpg" border="0" alt="James Tsai .Net Blog - SharePoint Web Service Correct Redirect" width="404" height="133" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Incorrect SOAP path.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/WheredidyoudeployyourcustomSharePoi.aspx_F02B/WebServiceIncorrectRedirection_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border-width: 0px" src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/WheredidyoudeployyourcustomSharePoi.aspx_F02B/WebServiceIncorrectRedirection_thumb.jpg" border="0" alt="James Tsai .Net Blog - SharePoint Web Service Incorrect Redirect" width="404" height="133" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
If you are new to SharePoint or like to know more about how SharePoint handles HTTP requests (SPRequestModule) and SharePoint architecture/infrastructure . I recommand you to read these two articles from MSDN and TechNet 
&lt;/p&gt;
&lt;p&gt;
For WSS 3.0 (SharePoint Server 2007) - &lt;a href="http://technet.microsoft.com/en-us/magazine/2008.05.insidesharepoint.aspx" target="_blank" title="Inside Sharepoint  Building Your SharePoint Infrastructure"&gt;Inside Sharepoint&amp;nbsp; Building Your SharePoint Infrastructure&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
For SharePoint Portal Server 2003 - &lt;a href="http://msdn.microsoft.com/en-us/library/ms916813.aspx" target="_blank" title="Architectural Overview of Windows SharePoint Services"&gt;Architectural Overview of Windows SharePoint Services&lt;/a&gt;
&lt;/p&gt;
</description>
      <link>http://www.jamestsai.net/Blog/post/Where-do-you-deploy-custom-SharePoint-web-service-files-to-(asmx-discoaspx-and-wsdlaspx).aspx</link>
      <comments>http://www.jamestsai.net/Blog/post/Where-do-you-deploy-custom-SharePoint-web-service-files-to-(asmx-discoaspx-and-wsdlaspx).aspx#disqus_thread</comments>
      <guid>http://www.jamestsai.net/Blog/post.aspx?id=d814b1a3-f0cc-4e66-b158-6f15af41605a</guid>
      <pubDate>Wed, 07 Jan 2009 06:56:00 -1300</pubDate>
      <category>SharePoint</category>
      <dc:publisher>James</dc:publisher>
      <pingback:server>http://www.jamestsai.net/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.jamestsai.net/Blog/post.aspx?id=d814b1a3-f0cc-4e66-b158-6f15af41605a</pingback:target>
      <slash:comments>121</slash:comments>
      <trackback:ping>http://www.jamestsai.net/Blog/trackback.axd?id=d814b1a3-f0cc-4e66-b158-6f15af41605a</trackback:ping>
      <wfw:comment>http://www.jamestsai.net/Blog/post/Where-do-you-deploy-custom-SharePoint-web-service-files-to-(asmx-discoaspx-and-wsdlaspx).aspx#disqus_thread</wfw:comment>
      <wfw:commentRss>http://www.jamestsai.net/Blog/syndication.axd?post=d814b1a3-f0cc-4e66-b158-6f15af41605a</wfw:commentRss>
    </item>
    <item>
      <title>Showing "my links" with QuickLinksMicroView web part - Issues you should know about</title>
      <description>&lt;p&gt;
&lt;a href="http://www.sharepoint-tips.com/2008/06/showing-my-links-on-web-page.html" target="_blank"&gt;Ishai&amp;#39;s post - Showing &amp;quot;my links&amp;quot; on a web page&lt;/a&gt; has explained how you can use the QuickLinksMicroView web part to show users &amp;quot;my links&amp;quot; on SharePoint web part page.
&lt;/p&gt;
&lt;p&gt;
The web part looked great when I first added it to the web part page, but it wasn&amp;#39;t long before I discovered some of &amp;quot;bugs&amp;quot; in this web part. Bugs or by design?
&lt;/p&gt;
&lt;p&gt;
I will show you what those bugs are by using following configurations: Two groups, 6 links in the first group and 3 links in the second group.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/ShowingmylinkswithQuickLinksMicroViewweb_D30B/QuickLinksMicroViewItems_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border-width: 0px" src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/ShowingmylinkswithQuickLinksMicroViewweb_D30B/QuickLinksMicroViewItems_thumb.jpg" border="0" alt="James Tsai .Net SharePoint Blog - QuickLinksMicroView Items" width="147" height="194" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Now let&amp;#39;s change the default &amp;quot;Number of rows to display&amp;quot; value from 10 to 2
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/ShowingmylinkswithQuickLinksMicroViewweb_D30B/QuickLinksMicroViewConfiguration_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/ShowingmylinkswithQuickLinksMicroViewweb_D30B/QuickLinksMicroViewConfiguration_thumb.jpg" border="0" alt="James Tsai .Net SharePoint Blog - QuickLinksMicroView Configuration" width="156" height="254" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Click Ok and see what it gets us.
&lt;/p&gt;
&lt;h2&gt;1. &amp;quot;Show/Hide additional links&amp;quot; hyperlink will not work without &amp;quot;portal.css&amp;quot; CSS registration&lt;/h2&gt; 
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/ShowingmylinkswithQuickLinksMicroViewweb_D30B/QuickLinksMicroViewNoPortalCSS_4.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/ShowingmylinkswithQuickLinksMicroViewweb_D30B/QuickLinksMicroViewNoPortalCSS_thumb_1.jpg" border="0" alt="James Tsai .Net SharePoint Blog - QuickLinksMicroView No Portal CSS" width="149" height="194" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
As you can see there is a &amp;quot;show 4 additional links&amp;quot; hyperlink at bottom of the first group (Don&amp;#39;t worry about the second group for now, I will get to that later).&amp;nbsp; Click on the link toggles the display text (hide/show 4 additional links) without change the number of displayed items in group (no actual hide or show for additional items). 
&lt;/p&gt;
&lt;p&gt;
The problem here is  that the QuickLinksMicroView web part hides and shows item by changing the CSS class name of the items from the &amp;quot;groupHide&amp;quot; to &amp;quot;groupShow&amp;quot; or vice versa. Both &amp;quot;groupHide&amp;quot; and &amp;quot;groupShow&amp;quot; are the CSS classes defined in the &amp;quot;portal.css&amp;quot;. The QuickLinksMicroView web part uses those CSS class without registering the &amp;quot;portal.css&amp;quot; within its code, that means it can only rely on the other controls on the same page to do it. 
&lt;/p&gt;
&lt;p&gt;
If you can&amp;#39;t re-produce this problem, it probably means that there is a control on your page has already done the registration. You can check it by look into &amp;quot;SPContext.Current.m_cssList&amp;quot; or &amp;quot;SPContext.Current.CssReferences&amp;quot; properties and see if you can find &amp;quot;portal.css&amp;quot;. Or you can simply re-produce this problem by adding the QuickLinksMicroView web part to blank new team site.
&lt;/p&gt;
&lt;p&gt;
To fix the problem, override the OnLoad method (If you&amp;#39;ve decided to create a custom class that inherits from the OOTB QuickLinksMicroView class)
&lt;/p&gt;
&lt;p&gt;
&lt;div class="code"&gt;

&lt;/p&gt;
&lt;p&gt;
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; NewQuickLinksMicroView : QuickLinksMicroView
&lt;/p&gt;
&lt;p&gt;
{
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnLoad(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;base&lt;/span&gt;.OnLoad(sender, e);
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CssRegistration.Register(&amp;quot;portal.css&amp;quot;);
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p&gt;
}
&lt;/p&gt;
&lt;p&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;
The code above make sure the portal.css is available to the NewQuickLinksMicroView web part when it is used on the page.
&lt;/p&gt;
&lt;p&gt;
You can now test &amp;quot;Show/Hide additional links&amp;quot; again with this new class, and see it is now working.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/ShowingmylinkswithQuickLinksMicroViewweb_D30B/QuickLinksMicroViewWithPortalCSS_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/ShowingmylinkswithQuickLinksMicroViewweb_D30B/QuickLinksMicroViewWithPortalCSS_thumb.jpg" border="0" alt="James Tsai .Net SharePoint Blog - QuickLinksMicroView with Portal CSS" width="159" height="181" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h2&gt;2. &amp;quot;Show/Hide additional links&amp;quot; hyperlink is not displaying for the group with number of items less or equal to (&lt;strong&gt;(number of rows to display + 1 ) X (number of columns to display))&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;(number of rows to display + 1 ) X (number of columns to display) &lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Ok, this is a very interesting bug and you probably have no idea of what I am talking about. But let&amp;#39;s try and experiment with it and you&amp;#39;ll see.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
First test -
&lt;/p&gt;
&lt;p&gt;
The &amp;quot;Group 1&amp;quot; in my example has 3 items. We also set
&lt;/p&gt;
&lt;p&gt;
&amp;quot;number of columns to display&amp;quot; = 1
&lt;/p&gt;
&lt;p&gt;
&amp;quot;number of rows to display&amp;quot; = 2
&lt;/p&gt;
&lt;p&gt;
We would expect the &amp;quot;Show/Hide additional links&amp;quot; hyperlink will be displayed for this group (to show and hide 1 additional item)
&lt;/p&gt;
&lt;p&gt;
Now, applying above values to the magic formula described above, we have
&lt;/p&gt;
&lt;p&gt;
1 * (2 + 1) = 3. Which is equal to the number of items in &amp;quot;Group 1&amp;quot; and you can see that the &amp;quot;Show/Hide additional links&amp;quot; hyperlink is not showing in this case.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/ShowingmylinkswithQuickLinksMicroViewweb_D30B/QuickLinksMicroViewOneColumnTwoRows_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/ShowingmylinkswithQuickLinksMicroViewweb_D30B/QuickLinksMicroViewOneColumnTwoRows_thumb.jpg" border="0" alt="James Tsai .Net SharePoint Blog - QuickLinksMicroView One Column Two Rows" width="165" height="218" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Second test - 
&lt;/p&gt;
&lt;p&gt;
This time we change columns from 1 to 2 and rows from 2 to 1.
&lt;/p&gt;
&lt;p&gt;
Group 1 items = 3
&lt;/p&gt;
&lt;p&gt;
&amp;quot;number of columns to display&amp;quot; = 2
&lt;/p&gt;
&lt;p&gt;
&amp;quot;number of rows to display&amp;quot; = 1
&lt;/p&gt;
&lt;p&gt;
We still expect the &amp;quot;Show/Hide additional links&amp;quot; hyperlink to display in this scenario, since it still has 1 additional item to hide and show.
&lt;/p&gt;
&lt;p&gt;
2 * (1 + 1) = 4. The result value is greater than the total number of items in Group 1 (3 items) and hyperlink is not showing again in this case.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/ShowingmylinkswithQuickLinksMicroViewweb_D30B/QuickLinksMicroViewTwoColumnOneRows_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/ShowingmylinkswithQuickLinksMicroViewweb_D30B/QuickLinksMicroViewTwoColumnOneRows_thumb.jpg" border="0" alt="James Tsai .Net SharePoint Blog - QuickLinksMicroView Two Columns One Row" width="186" height="202" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Why &lt;strong&gt;(number of rows to display + 1 ) X (number of columns to display)&lt;/strong&gt; ?
&lt;/p&gt;
&lt;p&gt;
QuickLinkMicroView web part uses&lt;strong&gt; ShouldRenderMoreLink() &lt;/strong&gt;method in PrivacyItemViewer class to determine if the number of items in group excess the configured number to be displayed. (Microsoft.SharePoint.Portal.WebControls.PrivacyItemViewer is the base class of QuickLinkMicroView) 
&lt;/p&gt;
&lt;p&gt;
&lt;div class="code"&gt;

&lt;/p&gt;
&lt;p&gt;
&lt;span class="rem"&gt;//ShouldRenderMoreLink() in Microsoft.SharePoint.Portal.WebControls.PrivacyItemViewer&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; ShouldRenderMoreLink(&lt;span class="kwrd"&gt;int&lt;/span&gt; rows, GroupInfo info)
&lt;/p&gt;
&lt;p&gt;
{
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;if&lt;/span&gt;(rows &amp;lt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.DisplayRows)
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;return&lt;/span&gt; (info.ItemsInGroup &amp;gt; (&lt;span class="kwrd"&gt;this&lt;/span&gt;.DisplayColumns * (&lt;span class="kwrd"&gt;this&lt;/span&gt;.DisplayRows + 1)));
&lt;/p&gt;
&lt;p&gt;
}
&lt;/p&gt;
&lt;p&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;
The &amp;quot;if&amp;quot; statement checks whether the current processing row number is smaller than the defined &amp;quot;number of rows to display&amp;quot; value. If it is true, the method returns the value &amp;quot;false&amp;quot; to indicates that the current row does not need to be hidden.
&lt;/p&gt;
&lt;p&gt;
If &amp;quot;rows &amp;lt; this.DisplayRows&amp;quot; returns false, it means the current row number is greater than the &amp;quot;number of rows to display&amp;quot; value. It tells QuickLinksMicroView to hide this row (or any other rows from now) by default and tells web part to generate the &amp;quot;Show/Hide additional links&amp;quot; hyperlink on page.
&lt;/p&gt;
&lt;p&gt;
But before it does that, it carefully checks if there are actually more items to be displayed in this row. Because rows are iterated using rows++, so it will always get an extra empty row count.
&lt;/p&gt;
&lt;p&gt;
As you can see in the code block the checking is done by using (info.ItemsInGroup &amp;gt; (this.DisplayColumns * (this.DisplayRows + 1))), and is where the bug exist, the extra &amp;quot;+1&amp;quot; on the &amp;quot;this.DisplayRows&amp;quot; is responsible for the causes of incorrect calculation. 
&lt;/p&gt;
&lt;p&gt;
If you remove the &amp;quot;+1&amp;quot; from the calculation, the QuickLinksMicroView web part will hide and show extra rows correctly.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/ShowingmylinkswithQuickLinksMicroViewweb_D30B/QuickLinksMicroViewFixed_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/ShowingmylinkswithQuickLinksMicroViewweb_D30B/QuickLinksMicroViewFixed_thumb.jpg" border="0" alt="James Tsai .Net SharePoint Blog - QuickLinksMicroView Fixed" width="175" height="186" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Note:
&lt;/p&gt;
&lt;p&gt;
I don&amp;#39;t see there is a purpose of having &amp;quot;+1&amp;quot; on the &amp;quot;this.DisplayRows&amp;quot;. Please let me know if you do
&lt;/p&gt;
&lt;p&gt;
To fix this problem (to remove the &amp;quot;+1&amp;quot;) you will have to re-create or override some of the methods, variables and classes. Because ShouldRenderMoreLink() is a private method of PrivacyItemViewer and it uses an internal class as its parameter.
&lt;/p&gt;
&lt;p&gt;
Hope it helps! 
&lt;/p&gt;
&lt;p&gt;
James
&lt;/p&gt;
</description>
      <link>http://www.jamestsai.net/Blog/post/Showing-my-links-with-QuickLinksMicroView-web-part-Issues-you-should-know-about.aspx</link>
      <comments>http://www.jamestsai.net/Blog/post/Showing-my-links-with-QuickLinksMicroView-web-part-Issues-you-should-know-about.aspx#disqus_thread</comments>
      <guid>http://www.jamestsai.net/Blog/post.aspx?id=7295b0da-67b0-4190-a01d-4f16d97dc388</guid>
      <pubDate>Thu, 20 Nov 2008 03:53:00 -1300</pubDate>
      <category>SharePoint</category>
      <dc:publisher>James</dc:publisher>
      <pingback:server>http://www.jamestsai.net/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.jamestsai.net/Blog/post.aspx?id=7295b0da-67b0-4190-a01d-4f16d97dc388</pingback:target>
      <slash:comments>53</slash:comments>
      <trackback:ping>http://www.jamestsai.net/Blog/trackback.axd?id=7295b0da-67b0-4190-a01d-4f16d97dc388</trackback:ping>
      <wfw:comment>http://www.jamestsai.net/Blog/post/Showing-my-links-with-QuickLinksMicroView-web-part-Issues-you-should-know-about.aspx#disqus_thread</wfw:comment>
      <wfw:commentRss>http://www.jamestsai.net/Blog/syndication.axd?post=7295b0da-67b0-4190-a01d-4f16d97dc388</wfw:commentRss>
    </item>
    <item>
      <title>How To Create AJAX-enabled SharePoint Web Part with UpdatePanel and UpdateProgress in 10 minutes</title>
      <description>&lt;p&gt;
In this post I am going to show you how you can setup your SharePoint site to support Microsoft ASP.NET AJAX framework and create a basic AJAX-enabled SharePoint Web Part. You can find many great articles on MSDN on how to do these and they explained in more details, but if you are looking for a way to get it up and running in 10 minutes, this is it.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/HowToCreateAJAXenabledSharePointWebPartw_F756/AJAX_enabled_webpart_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/HowToCreateAJAXenabledSharePointWebPartw_F756/AJAX_enabled_webpart_thumb.jpg" border="0" alt="James Tsai .NET SharePoint Blog - AJAX enabled webpart" width="286" height="72" /&gt;&lt;/a&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/HowToCreateAJAXenabledSharePointWebPartw_F756/AJAX_enabled_webpart_updating_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/HowToCreateAJAXenabledSharePointWebPartw_F756/AJAX_enabled_webpart_updating_thumb.jpg" border="0" alt="James Tsai .Net SharePoint Blog - AJAX enabled webpart updating" width="311" height="62" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;An AJAX-enabled web part with update button and display current time every time when button is clicked. Loading image and text displayed during the update.&lt;/em&gt;
&lt;/p&gt;
&lt;h2&gt;Goal&lt;/h2&gt; 
&lt;ul&gt;
	&lt;li&gt;Enabling SharePoint site with ASP.NET AJAX framework support  &lt;/li&gt;
	&lt;li&gt;Create AJAX-enabled SharePoint web part  
	&lt;ul&gt;
		&lt;li&gt;with UpdateProgress control for visual feedback in browser when web part is updating  &lt;/li&gt;
		&lt;li&gt;with AJAX request event script to hide UpdatePanel while web part is updating&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;Add AJAX-enabled web part to page and see it in action&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;

&lt;/p&gt;
&lt;h2&gt;Solution&lt;/h2&gt; 
&lt;h3&gt;Enabling ASP.NET AJAX framework support for SharePoint site&lt;/h3&gt; 
&lt;p&gt;
1. Go download and install - &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=333325FD-AE52-4E35-B531-508D977D32A6&amp;amp;displaylang=en" target="_blank" title="Microsoft .Net Framework 3.5"&gt;Microsoft .Net Framework 3.5&lt;/a&gt; (if you haven&amp;#39;t already)
&lt;/p&gt;
&lt;p&gt;
Service Pack 1 for .NET Framework 3.5 is not required here, but it is recommended to install it for future capabilities
&lt;/p&gt;
&lt;p&gt;
2. Register ASP.NET AJAX server controls as safe controls. You can either:
&lt;/p&gt;
&lt;p&gt;
If you like the text-editing challenges - Go spend an hour follow the steps in &lt;a href="http://msdn.microsoft.com/en-us/library/bb861877.aspx"&gt;this article&lt;/a&gt; and hope you don&amp;#39;t get any errors :p (It is still recommended to read and understand how/what to change web.config to make AJAX working)
&lt;/p&gt;
&lt;p&gt;
Or if you are lazy and really want to get it working in 10 minutes - Go download this &lt;a href="http://www.moss2007.be/blogs/vandest/Documents/SPWebConfig_XML.zip" target="_blank" title="SharePoint Feature project download"&gt;SharePoint Feature (Change web.config for ASP.NET 3.5 AJAX support)&lt;/a&gt;. This project is created by &lt;a href="http://www.moss2007.be/blogs/vandest/archive/2008/10/03/spwebconfigmodification-without-hardcoding-the-modifications.aspx" target="_blank" title="SPWebConfigModification without hardcoding the modifications"&gt;[MVP] Steven Van de Craen&lt;/a&gt;. After you deploy this feature, you need to activate it from SharePoint Central Administration &amp;gt; Application Management &amp;gt; Manage Web Application Features. And it will register those server controls for you in web.config
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;h3&gt;Create AJAX-enabled SharePoint web part&lt;/h3&gt; 
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/HowToCreateAJAXenabledSharePointWebPartw_F756/image_2.png" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/HowToCreateAJAXenabledSharePointWebPartw_F756/image_thumb.png" border="0" alt="Jame Tsai .NET SharePoint Blog - Web Part structure diagram" width="404" height="176" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Above diagram shows the basic structure of AJAX-enabled web part created in this example.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
The orange and purple blocks are the classes you&amp;#39;ll need to implement in this example. Both blue squares are the ASP.NET AJAX server controls and other blue round squares are the common ASP.NET server controls.
&lt;/p&gt;
&lt;p&gt;
Their purpose will be explained in the following steps.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
1. Create progress template class for UpdateProgress control (Purple block in the diagram)
&lt;/p&gt;
&lt;p&gt;
Why?
&lt;/p&gt;
&lt;p&gt;
ASP.NET AJAX UpdateProgress control is used in web part for displaying visual feedback in browser when web part is updating. And UpdateProgress control is created dynamically. 
&lt;/p&gt;
&lt;p&gt;
MSDN - &lt;em&gt;&amp;quot;If you are creating UpdateProgress controls dynamically, you can &lt;strong&gt;create a custom template that inherits from the ITemplate&lt;/strong&gt; control. You &lt;strong&gt;specify markup in the InstantiateIn method&lt;/strong&gt;, and then &lt;strong&gt;set the ProgressTemplate property&lt;/strong&gt; of the dynamically created UpdateProgress control &lt;strong&gt;to a new instance of the custom template&lt;/strong&gt;.&amp;quot;&lt;/em&gt;
&lt;/p&gt;
&lt;div class="code"&gt;

&lt;p&gt;
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ProgressTemplate : ITemplate&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ImagePath { get; set; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; DisplayText { get; set; }  
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;public&lt;/span&gt; ProgressTemplate(&lt;span class="kwrd"&gt;string&lt;/span&gt; imagePath, &lt;span class="kwrd"&gt;string&lt;/span&gt; displayText)&lt;br /&gt;
&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; ImagePath = imagePath;&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; DisplayText = displayText;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; InstantiateIn(Control container)&lt;br /&gt;
&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; Image img = &lt;span class="kwrd"&gt;new&lt;/span&gt; Image();&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; img.ImageUrl = SPContext.Current.Site.Url+ &amp;quot;/&amp;quot; + ImagePath;  
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Label lbl = &lt;span class="kwrd"&gt;new&lt;/span&gt; Label();&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; lbl.Text = DisplayText;  
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; container.Controls.Add(img);&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; container.Controls.Add(lbl);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}  
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
You can see this custom template takes two string parameters in its constructor for image source URL and the text that you want to display. And for the markup in InstantiateIn method, Image and Label controls are created (use the values assigned from constructor) and added to container control. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
2. Create AJAX-enabled web part class (Orange block in the diagram)
&lt;/p&gt;
&lt;div class="code"&gt;

&lt;p&gt;
[XmlRoot(Namespace = &amp;quot;MossSimpleAJAXWebPart&amp;quot;)]&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; SampleAJAXWebPart : Microsoft.SharePoint.WebPartPages.WebPart&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {  
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DefaultValue(&amp;quot;&amp;quot;), WebBrowsable(&lt;span class="kwrd"&gt;true&lt;/span&gt;), Category(&amp;quot;ProgressTemplate&amp;quot;), Personalizable(PersonalizationScope.Shared)]&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ImagePath { get; set; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DefaultValue(&amp;quot;&amp;quot;), WebBrowsable(&lt;span class="kwrd"&gt;true&lt;/span&gt;), Category(&amp;quot;ProgressTemplate&amp;quot;), Personalizable(PersonalizationScope.Shared)]&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; DisplayText { get; set; }  
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; CreateChildControls()&lt;br /&gt;
&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; &lt;span class="kwrd"&gt;base&lt;/span&gt;.CreateChildControls();  
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UpdatePanel updatePanel1 = &lt;span class="kwrd"&gt;new&lt;/span&gt; UpdatePanel();&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; updatePanel1.ID = &amp;quot;udpItemListingWebPart&amp;quot;;&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; updatePanel1.UpdateMode = UpdatePanelUpdateMode.Conditional;  
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UpdateProgress updateProgress1 = &lt;span class="kwrd"&gt;new&lt;/span&gt; UpdateProgress();&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; updateProgress1.AssociatedUpdatePanelID = &amp;quot;udpItemListingWebPart&amp;quot;;&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; updateProgress1.ProgressTemplate = &lt;span class="kwrd"&gt;new&lt;/span&gt; ProgressTemplate(ImagePath, DisplayText);  
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Button button1 = &lt;span class="kwrd"&gt;new&lt;/span&gt; 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; button1.ID = &amp;quot;btnClick&amp;quot;;&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; button1.Text = &amp;quot;Update&amp;quot;;&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; button1.Click += &lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler(button1_Click);  
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Label label1 = &lt;span class="kwrd"&gt;new&lt;/span&gt; Label();&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; label1.ID = &amp;quot;lblShowTime&amp;quot;;&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; label1.Text = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&amp;quot;Updated at: {0} &amp;quot;, DateTime.Now.ToLongTimeString());  
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; updatePanel1.ContentTemplateContainer.Controls.Add(label1);&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; updatePanel1.ContentTemplateContainer.Controls.Add(button1);  
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;this&lt;/span&gt;.Controls.Add(updateProgress1);&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; &lt;span class="kwrd"&gt;this&lt;/span&gt;.Controls.Add(updatePanel1);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Render(HtmlTextWriter writer)&lt;br /&gt;
&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; &lt;span class="kwrd"&gt;base&lt;/span&gt;.Render(writer);&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; &lt;span class="kwrd"&gt;if&lt;/span&gt; (!ScriptManager.GetCurrent(&lt;span class="kwrd"&gt;this&lt;/span&gt;.Page).IsInAsyncPostBack)&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; {&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; &lt;span class="kwrd"&gt;string&lt;/span&gt; script = &amp;quot;&amp;quot;;&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; script = @&amp;quot;&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; var ITEMLISTINGBUTTONID;&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; with(Sys.WebForms.PageRequestManager.getInstance()){&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; add_beginRequest(onBeginRequest);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; add_endRequest(onEndRequest);&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; }&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; function onBeginRequest(sender, args){&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ITEMLISTINGBUTTONID = args.get_postBackElement().id;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $get(ITEMLISTINGBUTTONID).parentElement.style.display = &amp;#39;none&amp;#39;;&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; }&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; function onEndRequest(sender, args){&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; $get(ITEMLISTINGBUTTONID).parentElement.style.display = &amp;#39;&amp;#39;;&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; }&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; &amp;quot;;&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; &lt;span class="kwrd"&gt;this&lt;/span&gt;.Page.ClientScript.RegisterStartupScript(&lt;span class="kwrd"&gt;this&lt;/span&gt;.GetType(), &amp;quot;HideSimpleAJAXWebPartUDP&amp;quot;, script, &lt;span class="kwrd"&gt;true&lt;/span&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; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;void&lt;/span&gt; button1_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;
&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; &lt;span class="kwrd"&gt;this&lt;/span&gt;.label1.Text = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&amp;quot;Updated at: {0} &amp;quot;, DateTime.Now.ToLongTimeString());&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }  
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
This web part class has two public string properties for user to set values from UI. These values are used for creating an instance of ProgressTemplate described in step 1.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;CreateChildControls() method&lt;/strong&gt;
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	From the diagram you can see two ASP.NET AJAX controls are created in CreateChildControls() method (Blue squares)
	&lt;/p&gt;
	&lt;p&gt;
	UpdatePanel control - To perform partial-page updates. In order for partial-page updates to occur, you&amp;#39;ll need content, which is our Button and Label controls.
	&lt;/p&gt;
	&lt;p&gt;
	It is important to set &lt;strong&gt;UpdateMode&lt;/strong&gt; of UpdatePanel to &amp;quot;&lt;strong&gt;Conditional&lt;/strong&gt;&amp;quot;. (By default, this property is set to &amp;quot;Always&amp;quot;). Set it to &amp;quot;Conditional&amp;quot; prevents unwanted update occurring on every postback that originates from anywhere or any other web parts on the page.
	&lt;/p&gt;
	&lt;p&gt;
	UpdateProgress control - To display progress template with markup when associated UpdatePanel is updating.
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
&lt;strong&gt;Render() method&lt;/strong&gt;
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	Adding event handlers for events raised by the &lt;strong&gt;PageRequestManager &lt;/strong&gt;(From book ASP.NET AJAX in Action -&lt;em&gt; JavaScript object for managing the UpdatePanel controls on the page and fires off a series of events before, during and after an asynchronous postback, it becomes available when partial rendering is enabled on a page&lt;/em&gt;)
	&lt;/p&gt;
	&lt;p&gt;
	Two event handlers are registered for both beginRequest and endRequest events. And their purpose is to hide and show update panel div (generated by UpdatePanel control in web part) respectively during the update.
	&lt;/p&gt;
	&lt;p&gt;
	Note:
	&lt;/p&gt;
	&lt;p&gt;
	you cannot separate the JavaScript code to .js file and register it as web resource. Because web resource will be referenced before ASP.NET AJAX client side component on page. That means Sys.WebForms.PageRequestManager will not be available for you to register event handlers.
	&lt;/p&gt;
	&lt;p&gt;
	The script here will only register once on the page even if multiple instances of the same web part were added to the page. Because startup script is uniquely identified by its key and its type. Scripts with the same key and type are considered duplicates. Only one script with a given type and key pair can be registered with the page. Attempting to register a script that is already registered does not create a duplicate of the script.
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
&lt;strong&gt;button1_click()&lt;/strong&gt;
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	To update current time dynamically and display it in Label lable1 control
	&lt;/p&gt;
	&lt;p&gt;
	&amp;nbsp;
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
3. Create SharePoint feature to deploy AJAX-enabled web part
&lt;/p&gt;
&lt;p&gt;
You can skip this section if you already know how to create SharePoint feature for deploying custom web part
&lt;/p&gt;
&lt;p&gt;
feature.xml
&lt;/p&gt;
&lt;div class="code"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;="utf-8"&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;Feature&lt;/span&gt; &lt;span class="attr"&gt;Id&lt;/span&gt;&lt;span class="kwrd"&gt;="B67C2989-580E-490c-86CF-86F0FA849373"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;          &lt;span class="attr"&gt;Title&lt;/span&gt;&lt;span class="kwrd"&gt;="SimpleAJAXWebPart"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;          &lt;span class="attr"&gt;Description&lt;/span&gt;&lt;span class="kwrd"&gt;="Moss Simple AJAX Item Listing Web Part"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;          &lt;span class="attr"&gt;Version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0.0.0"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;          &lt;span class="attr"&gt;Hidden&lt;/span&gt;&lt;span class="kwrd"&gt;="FALSE"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;          &lt;span class="attr"&gt;Scope&lt;/span&gt;&lt;span class="kwrd"&gt;="Site"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;          &lt;span class="attr"&gt;DefaultResourceFile&lt;/span&gt;&lt;span class="kwrd"&gt;="core"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;          &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/sharepoint/"&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;ElementManifests&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;ElementManifest&lt;/span&gt; &lt;span class="attr"&gt;Location&lt;/span&gt;&lt;span class="kwrd"&gt;="elements.xml"&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;ElementFile&lt;/span&gt; &lt;span class="attr"&gt;Location&lt;/span&gt;&lt;span class="kwrd"&gt;="SimpleAJAXWebPart.dwp"&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;ElementManifests&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;Feature&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/p&gt;
elements.xml
&lt;div class="code"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;="utf-8"&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;Elements&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/sharepoint/"&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;Module&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="WebPartPopulation"&lt;/span&gt; &lt;span class="attr"&gt;Url&lt;/span&gt;&lt;span class="kwrd"&gt;="_catalogs/wp"&lt;/span&gt; &lt;span class="attr"&gt;RootWebOnly&lt;/span&gt;&lt;span class="kwrd"&gt;="TRUE"&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;File&lt;/span&gt; &lt;span class="attr"&gt;Url&lt;/span&gt;&lt;span class="kwrd"&gt;="SimpleAJAXWebPart.dwp"&lt;/span&gt; &lt;span class="attr"&gt;Type&lt;/span&gt;&lt;span class="kwrd"&gt;="GhostableInLibrary"&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;File&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;Module&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;Elements&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;
SimpleAJAXWebPart.dwp
&lt;/p&gt;
&lt;div class="code"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;="utf-8"&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;WebPart&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/WebPart/v2"&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;Assembly&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;YOUR_ASSEMBLY_INFO_HERE&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Assembly&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;TypeName&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;NAMESPACE.YOUR_WEB_PART_CLASSNAME_HERE&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;TypeName&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;Title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Moss Simple AJAX Web Part&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;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Description&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Simple AJAX Item Listing Web Part&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Description&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;WebPart&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;Add AJAX-enabled web part to Page and see it in action&lt;/h3&gt; 
&lt;p&gt;
Before you add this AJAX-enabled web part to web part page, you have to add ASP.NET AJAX ScriptManager control to your master page (default.master if you are using default master page).
&lt;/p&gt;
&lt;p&gt;
&lt;div class="code"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:ScriptManager&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="ScriptManager1"&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;/div&gt;
&lt;/p&gt;
&lt;p&gt;
Now you can add your AJAX-enabled web part to any web part page and see it in action. Remember to set web part image path and display text properties for ProgressTemplate to run properly.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/HowToCreateAJAXenabledSharePointWebPartw_F756/AJAX_enabled_webpart_configuration_4.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/HowToCreateAJAXenabledSharePointWebPartw_F756/AJAX_enabled_webpart_configuration_thumb_1.jpg" border="0" alt="James Tsai .NET SharePoint Blog - AJAX enabled webpart configuration" width="246" height="238" /&gt;&lt;/a&gt;
&lt;/p&gt;
</description>
      <link>http://www.jamestsai.net/Blog/post/How-To-Create-AJAX-enabled-SharePoint-Web-Part-with-UpdatePanel-and-UpdateProgress-in-10-minutes.aspx</link>
      <comments>http://www.jamestsai.net/Blog/post/How-To-Create-AJAX-enabled-SharePoint-Web-Part-with-UpdatePanel-and-UpdateProgress-in-10-minutes.aspx#disqus_thread</comments>
      <guid>http://www.jamestsai.net/Blog/post.aspx?id=634aa1b4-60c2-4c3a-b0ba-51fef1bb8efe</guid>
      <pubDate>Mon, 27 Oct 2008 06:47:00 -1300</pubDate>
      <category>ASP.NET</category>
      <category>Programming</category>
      <category>SharePoint</category>
      <dc:publisher>James</dc:publisher>
      <pingback:server>http://www.jamestsai.net/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.jamestsai.net/Blog/post.aspx?id=634aa1b4-60c2-4c3a-b0ba-51fef1bb8efe</pingback:target>
      <slash:comments>280</slash:comments>
      <trackback:ping>http://www.jamestsai.net/Blog/trackback.axd?id=634aa1b4-60c2-4c3a-b0ba-51fef1bb8efe</trackback:ping>
      <wfw:comment>http://www.jamestsai.net/Blog/post/How-To-Create-AJAX-enabled-SharePoint-Web-Part-with-UpdatePanel-and-UpdateProgress-in-10-minutes.aspx#disqus_thread</wfw:comment>
      <wfw:commentRss>http://www.jamestsai.net/Blog/syndication.axd?post=634aa1b4-60c2-4c3a-b0ba-51fef1bb8efe</wfw:commentRss>
    </item>
    <item>
      <title>How to change SharePoint Calendar default start hour and end hour of Day View</title>
      <description>&lt;p&gt;
Default Day View of SharePoint Calendar control has its start hour set to 7am and end hour to 5pm.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/HowtochangeSharePointCalendardefaultstar_852/DefaultDayViewStartHour_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/HowtochangeSharePointCalendardefaultstar_852/DefaultDayViewStartHour_thumb.jpg" border="0" alt="James Tsai .Net SharePoint Blog - Default Day View Start Hour" width="404" height="112" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
To change this you&amp;#39;ll need to update SPRegionalSettings.WorkDayStartHour and SPRegionalSettings.WorkDayEndtHour properties. And it is not something you can do from UI.
&lt;/p&gt;
&lt;p&gt;
For example, to change start hour to 6am and end hour to 6pm you&amp;#39;ll have to write and run this code
&lt;/p&gt;
&lt;p&gt;
&lt;div class="code"&gt;

&lt;/p&gt;
&lt;p&gt;
&lt;span class="kwrd"&gt;using&lt;/span&gt; (SPSite site = &lt;span class="kwrd"&gt;new&lt;/span&gt; SPSite(&amp;quot;http:&lt;span class="rem"&gt;//&amp;lt;YourSiteUrl&amp;gt;&amp;quot;))&lt;br /&gt;&lt;/span&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;using&lt;/span&gt; (SPWeb web = site.RootWeb)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPRegionalSettings regionalSettings = web.RegionalSettings;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; regionalSettings.WorkDayStartHour = 360;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; regionalSettings.WorkDayEndHour = 1080;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; web.Update();&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; }&lt;br /&gt;
} 
&lt;/p&gt;
&lt;p&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
The possible values you can set for WorkDayStartHour and WorkDayEndHour are 60 x (hour value in 24 hour format).
&lt;/p&gt;
&lt;p&gt;
Basically, they are total number of minutes. For example,
&lt;/p&gt;
&lt;p&gt;
6am = 6 x 60 = 360
&lt;/p&gt;
&lt;p&gt;
6pm = 18 x 60 = 1080
&lt;/p&gt;
&lt;p&gt;
9pm = 21 x 60 = 1260 and so on..
&lt;/p&gt;
&lt;p&gt;
As you can see, the start hour of Day View in calendar has now changed
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/HowtochangeSharePointCalendardefaultstar_852/ChangedDayViewStartHour_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/HowtochangeSharePointCalendardefaultstar_852/ChangedDayViewStartHour_thumb.jpg" border="0" alt="James Tsai .Net SharePoint Blog - Changed Day View Start Hour" width="404" height="109" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Hope it helps
&lt;/p&gt;
&lt;p&gt;
-James
&lt;/p&gt;
</description>
      <link>http://www.jamestsai.net/Blog/post/How-to-change-SharePoint-Calendar-default-start-hour-and-end-hour-of-Day-View.aspx</link>
      <comments>http://www.jamestsai.net/Blog/post/How-to-change-SharePoint-Calendar-default-start-hour-and-end-hour-of-Day-View.aspx#disqus_thread</comments>
      <guid>http://www.jamestsai.net/Blog/post.aspx?id=0b2adc8f-c138-4b25-876f-f0b0ab22161a</guid>
      <pubDate>Thu, 09 Oct 2008 15:35:00 -1300</pubDate>
      <category>Programming</category>
      <category>SharePoint</category>
      <dc:publisher>James</dc:publisher>
      <pingback:server>http://www.jamestsai.net/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.jamestsai.net/Blog/post.aspx?id=0b2adc8f-c138-4b25-876f-f0b0ab22161a</pingback:target>
      <slash:comments>79</slash:comments>
      <trackback:ping>http://www.jamestsai.net/Blog/trackback.axd?id=0b2adc8f-c138-4b25-876f-f0b0ab22161a</trackback:ping>
      <wfw:comment>http://www.jamestsai.net/Blog/post/How-to-change-SharePoint-Calendar-default-start-hour-and-end-hour-of-Day-View.aspx#disqus_thread</wfw:comment>
      <wfw:commentRss>http://www.jamestsai.net/Blog/syndication.axd?post=0b2adc8f-c138-4b25-876f-f0b0ab22161a</wfw:commentRss>
    </item>
    <item>
      <title>How to use SharePoint Delegate Control to change the navigate URL of Manage Links (My Links)</title>
      <description>&lt;p&gt;
&lt;em&gt;Microsoft Office Online -&lt;/em&gt;
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;em&gt;By using the &lt;strong&gt;My Links&lt;/strong&gt; menu, you can easily add new links, reorganize your links, access sites where you are a member, and click links to save them to you &lt;strong&gt;My Links&lt;/strong&gt; list.&lt;/em&gt;
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
You can use this feature when you have &amp;quot;My Site&amp;quot; setup and running in your SharePoint Shared Services.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/HowtouseSharePointDelegateControltochang_AE39/MyLinksManageLinks_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/HowtouseSharePointDelegateControltochang_AE39/MyLinksManageLinks_thumb.jpg" border="0" alt="James Tsai .NET SharePoint Blog - My Links Manage Links menu control" width="257" height="144" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h1&gt;Problem&lt;/h1&gt; 
&lt;p&gt;
Let&amp;#39;s say you have following two site collections setup for your SharePoint intranet site and My Site.
&lt;/p&gt;
&lt;p&gt;
Intranet - http://intranet/
&lt;/p&gt;
&lt;p&gt;
My Site - http://mysite/
&lt;/p&gt;
&lt;p&gt;
When user is accessing manage links page by clicking on &lt;strong&gt;My Links, Manage Links &lt;/strong&gt;menu on Intranet site, the menu control redirects user to
&lt;/p&gt;
&lt;p&gt;
http://mysite/_layouts/MyQuickLinks.aspx
&lt;/p&gt;
&lt;p&gt;
And you probably don&amp;#39;t want this to happen, because of following reasons
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;You want to hide My Site from user, but you still want to use My Links feature.  &lt;/li&gt;
	&lt;li&gt;You don&amp;#39;t want user to navigate away from current site collection when they clicked on the Manage Links menu.  &lt;/li&gt;
	&lt;li&gt;You want MyQuickLinks.aspx page to inherit and use current site theme.  &lt;/li&gt;
	&lt;li&gt;You are experiencing the MOSS SP1 bug I described in &lt;a href="http://www.jamestsai.net/Blog/post/Unknown-Error-Manage-Links-of-My-Links.aspx" target="_blank" title="SharePoint Unknown Error - Manage Links of My Links"&gt;last post&lt;/a&gt;.  &lt;/li&gt;
	&lt;li&gt;OR you just want to customize it to navigate to the any URL&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Goal&lt;/h1&gt; 
&lt;p&gt;
The goal here is obvious. To customize the navigate URL of Manage Links. In the example above, user should be redirected to
&lt;/p&gt;
&lt;p&gt;
http://intranet/_layout/MyQuickLinks.aspx
&lt;/p&gt;
&lt;h1&gt;Solution&lt;/h1&gt; 
&lt;p&gt;
You&amp;#39;ll need following three things to achieve the goal
&lt;/p&gt;
&lt;p&gt;

&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Customized version of MyLinksMenuControl class (MossSampleExtendedMyLinksMenuControl.cs) &lt;/li&gt;
	&lt;li&gt;SharePoint Delegate Control with control template (ExtendedMyLinks.ascx) &lt;/li&gt;
	&lt;li&gt;SharePoint feature to register Delegate Control&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;The solution structure&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/HowtouseSharePointDelegateControltochang_AE39/MyLinksDelegateControl_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/HowtouseSharePointDelegateControltochang_AE39/MyLinksDelegateControl_thumb.jpg" border="0" alt="James Tsai .Net SharePoint Blog - My Links Delegate Control Solution Structure" width="254" height="254" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
SharePoint Delegate control plays the key role in this solution, it allows you to easily override OOTB Manage Links control with minimum coding and customization.
&lt;/p&gt;
&lt;p&gt;
If you want to know more about SharePoint Delegate Control, you can go and read &lt;a href="http://msdn.microsoft.com/en-us/library/ms463169.aspx" target="_blank" title="WSS 3.0 SDK - Delegate Control (Control Templatization)"&gt;MSDN - Delegate Control&lt;/a&gt;
&lt;/p&gt;
&lt;h2&gt;Step 1. Create a new class from MyLinksMenuControl&lt;/h2&gt; 
&lt;p&gt;
The OOTB &lt;strong&gt;My Links&lt;/strong&gt; menu control is &lt;strong&gt;Microsoft.Office.Server.WebControls.MyLinksMenuControl&lt;/strong&gt;. You&amp;#39;ll have to create a new control which inherit from the OOTB one. And override the navigate URL of &lt;strong&gt;Manage Links&lt;/strong&gt; with custom URL.
&lt;/p&gt;
&lt;div class="code"&gt;

&lt;p&gt;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br /&gt;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections;&lt;br /&gt;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.SharePoint;&lt;br /&gt;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.SharePoint.WebControls;&lt;br /&gt;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.SharePoint.Portal.WebControls;  
&lt;/p&gt;
&lt;p&gt;
&lt;span class="kwrd"&gt;namespace&lt;/span&gt; MossSample&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MossSampleExtendedMyLinksMenuControl : MyLinksMenuControl&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; ArrayList LoadMenuItems()&lt;br /&gt;
&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; ArrayList ar = &lt;span class="kwrd"&gt;base&lt;/span&gt;.LoadMenuItems();  
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MenuItemTemplate mtp = (MenuItemTemplate)(ar[ar.Count - 1]);  
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mtp.ClientOnClickNavigateUrl = SPContext.Current.Site.Url + &amp;quot;/_layouts/MyQuickLinks.aspx&amp;quot;;&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; mtp.ClientOnClickScript = &amp;quot;window.location=&amp;#39;&amp;quot; + SPContext.Current.Site.Url + &amp;quot;/_layouts/MyQuickLinks.aspx&amp;#39;&amp;quot;;  
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ar.RemoveAt(ar.Count - 1);&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; ar.Add(mtp);  
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;return&lt;/span&gt; ar;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}  
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
LoadMenuItems() method loads menu items when user clicked on &lt;strong&gt;My Link&lt;/strong&gt; menu and it returns an ArrayList of menu items to its caller. Inside this method you can intercept original menu items and change their default properties.
&lt;/p&gt;
&lt;div class="code"&gt;

&lt;p&gt;
MenuItemTemplate mtp = (MenuItemTemplate)(ar[ar.Count - 1]); 
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
Because &lt;strong&gt;Manage Links&lt;/strong&gt; is always last menu item in ArrayList, the code above creates a new MenuItemTemplate from original &lt;strong&gt;Manage Links&lt;/strong&gt; MenuItemTemplate.
&lt;/p&gt;
&lt;p&gt;
MenuItemTemplate has two properties for setting its navigate URL, &lt;strong&gt;ClientOnClickNavigateUrl&lt;/strong&gt; and &lt;strong&gt;ClientOnClickScript&lt;/strong&gt;.&amp;nbsp; Replace these two properties with any URL you want it to navigate to. In this example, we want it to display MyQuickLinks.aspx under same site collection.
&lt;/p&gt;
&lt;div class="code"&gt;

&lt;p&gt;
SPContext.Current.Site.Url + &amp;quot;/_layouts/MyQuickLinks.aspx&amp;quot;;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
It means if user clicked on &lt;strong&gt;Manage Links&lt;/strong&gt; from http://intranet/ , it navigates user to http://intranet/_layouts/MyQuickLinks.aspx.
&lt;/p&gt;
&lt;p&gt;
After all above changes, you have to remove the original &lt;strong&gt;Manage Links&lt;/strong&gt; menu item from menu items ArrayList loaded by base.LoadMenuItems(). And add the new one you just created to ArrayList and return this changed ArrayList.
&lt;/p&gt;
&lt;div class="code"&gt;

&lt;p&gt;
ar.RemoveAt(ar.Count - 1);&lt;br /&gt;
ar.Add(mtp);  
&lt;/p&gt;
&lt;p&gt;
&lt;span class="kwrd"&gt;return&lt;/span&gt; ar;
&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Step 2. Create SharePoint Delegate Control Template&lt;/h2&gt; 
&lt;p&gt;
To use the control you created in Step 1. You have to create a new delegate control template to host this control. The OOTB one can be found in &lt;strong&gt;&lt;em&gt;12\TEMPLATE\CONTROLTEMPLATES\MyLinks.ascx&lt;/em&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
You can create a new .ascx file inside same or new directory and name it ExtendedMyLinks.ascx. In this example ExtendedMyLinks.ascx is created inside \CONTROLTEMPLATES\MossSample\.
&lt;/p&gt;
&lt;p&gt;
Copy everything in MyLinks.ascx to ExtendedMyLinks.ascx. 
&lt;/p&gt;
&lt;p&gt;
Replace 
&lt;/p&gt;
&lt;div class="code"&gt;&lt;br /&gt;&lt;span class="asp"&gt;&amp;lt;%@ Register Tagprefix="SPSWC" Namespace="Microsoft.SharePoint.Portal.WebControls" Assembly="Microsoft.SharePoint.Portal, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;
with
&lt;/p&gt;
&lt;div class="code"&gt;&lt;br /&gt;&lt;span class="asp"&gt;&amp;lt;%@ Register Tagprefix="SPSWC" Namespace="YourControlClassNamespace" Assembly="YourControlClassAssemblyName, Version=&amp;lt;version&amp;gt;, Culture=neutral, PublicKeyToken=&amp;lt;keyToken&amp;gt;" %&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;
and replace
&lt;/p&gt;
&lt;div class="code"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SPSWC:MyLinksMenuControl&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="MyLinksMenu"&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;/div&gt;
&lt;p&gt;
with
&lt;/p&gt;
&lt;div class="code"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SPSWC:YourControlClassName&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="MyLinksMenu"&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;/div&gt;
&lt;p&gt;
In our example, the control class name is MossSampleExtendedMyLinksMenuControl and the name space is MossSample
&lt;/p&gt;
&lt;p&gt;
The assembly info is &amp;quot;&lt;em&gt;MossSample, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0bee755dfbe63ba5&lt;/em&gt;&amp;quot;
&lt;/p&gt;
&lt;p&gt;
The final look ExtendedMyLinks.ascx is like this.
&lt;/p&gt;
&lt;div class="code"&gt;&lt;br /&gt;&lt;span class="asp"&gt;&amp;lt;%@ Control className="MyLinksUserControl" Language="C#" Inherits="Microsoft.SharePoint.Portal.WebControls.MyLinksUserControl&amp;amp;#44;Microsoft.SharePoint.Portal, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="asp"&gt;&amp;lt;%@ Register Tagprefix="OSRVWC" Namespace="Microsoft.Office.Server.WebControls" Assembly="Microsoft.Office.Server, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;span class="asp"&gt;&amp;lt;%@ Register Tagprefix="SPSWC" Namespace="MossSample" Assembly="MossSample, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0bee755dfbe63ba5" %&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="asp"&gt;&amp;lt;%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;table&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&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;td&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="ms-globallinks"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SPSWC:MossSampleExtendedMyLinksMenuControl&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="MyLinksMenu"&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;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&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;td&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="ms-globallinks"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Literal&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="hlMySiteSpacer"&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;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&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;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;table&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;h2&gt;Step 3. Create a SharePoint Feature to Register Delegate Control&lt;/h2&gt; 
&lt;p&gt;
You are a almost done. This last step is the most important step to get your control to override OOTB &lt;strong&gt;My Links&lt;/strong&gt; control.
&lt;/p&gt;
&lt;p&gt;
You need to create a SharePoint feature with following feature metadata 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;feature.xml&lt;/strong&gt;
&lt;/p&gt;
&lt;div class="code"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;="utf-8"&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;Feature&lt;/span&gt; &lt;span class="attr"&gt;Id&lt;/span&gt;&lt;span class="kwrd"&gt;="{CF2BB280-D59B-45b9-8A0C-B7F19E42C6FE}"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="attr"&gt;Title&lt;/span&gt;&lt;span class="kwrd"&gt;="Moss Sample Extened GlobalLink2"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="attr"&gt;Description&lt;/span&gt;&lt;span class="kwrd"&gt;="Extended OOTB MyLinks Control from MySite Feature"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="attr"&gt;Version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0.0.0"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="attr"&gt;Hidden&lt;/span&gt;&lt;span class="kwrd"&gt;="FALSE"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="attr"&gt;Scope&lt;/span&gt;&lt;span class="kwrd"&gt;="Site"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/sharepoint/"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="attr"&gt;ImageUrl&lt;/span&gt; &lt;span class="kwrd"&gt;=""&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;ElementManifests&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;ElementManifest&lt;/span&gt; &lt;span class="attr"&gt;Location&lt;/span&gt;&lt;span class="kwrd"&gt;="elements.xml"&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;ElementManifests&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;Feature&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;
&lt;strong&gt;elements.xml&lt;/strong&gt;
&lt;/p&gt;
&lt;div class="code"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Elements&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/sharepoint/"&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;Control&lt;/span&gt; &lt;span class="attr"&gt;Id&lt;/span&gt;&lt;span class="kwrd"&gt;="GlobalSiteLink2"&lt;/span&gt; &lt;span class="attr"&gt;Sequence&lt;/span&gt;&lt;span class="kwrd"&gt;="99"&lt;/span&gt; &lt;span class="attr"&gt;Controlsrc&lt;/span&gt;&lt;span class="kwrd"&gt;="~/_controltemplates/mosssample/extendedmylinks.ascx"&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;Elements&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;
It is very important to give this control with id &lt;strong&gt;GlobalSiteLinks2&lt;/strong&gt; and &lt;strong&gt;sequence less than 100&lt;/strong&gt;. Because this is the same id used by OOTB MySite feature when it register the original My Links menu delegate control.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;MSDN SharePoint DelegateControl class -&lt;/em&gt;
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;em&gt;By declaring a control as an element in a Feature and giving it a priority through the &lt;strong&gt;Sequence&lt;/strong&gt; attribute of the &lt;/em&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms469179.aspx"&gt;&lt;em&gt;Control&lt;/em&gt;&lt;/a&gt;&lt;em&gt; element, Windows SharePoint Services selects the declared control candidate and instantiates it as a child of the delegate control. At run time, this delegate control accepts the union of control elements declared at the server farm, Web application, site collection, and Web site levels. The control that has the lowest sequence number is added to the control tree through the &lt;strong&gt;DelegateControl&lt;/strong&gt;&lt;/em&gt;
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
That means your new &lt;strong&gt;My Links&lt;/strong&gt; delegate control will override the original one, because the sequence number of your control is 99 and original control sequence number is 100.
&lt;/p&gt;
&lt;p&gt;
The OOTB control id and sequence number can be found in &lt;em&gt;12\TEMPLATE\FEATURES\MySite\MySiteFeatureElements.xml&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Note: You can give your control the different ID. But if you do that, you also need to change master page&amp;#39;s DelegateControl with the new control ID. The default.master has this DelegateControl declaration for &lt;strong&gt;My Links&lt;/strong&gt; menu
&lt;/p&gt;
&lt;div class="code"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SharePoint:DelegateControl&lt;/span&gt; &lt;span class="attr"&gt;ControlId&lt;/span&gt;&lt;span class="kwrd"&gt;="GlobalSiteLink2"&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;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;
Name it with &amp;quot;GlobalSIteLinks2&amp;quot; saves you the trouble of modify master page.
&lt;/p&gt;
&lt;p&gt;
Now, install and activate the feautre.
&lt;/p&gt;
&lt;p&gt;
you can now test the navigate URL of Mange Links by clicking on My Link menu on your site.
&lt;/p&gt;
</description>
      <link>http://www.jamestsai.net/Blog/post/How-to-use-SharePoint-Delegate-Control-to-change-the-navigate-URL-of-Manage-Links-(My-Links).aspx</link>
      <comments>http://www.jamestsai.net/Blog/post/How-to-use-SharePoint-Delegate-Control-to-change-the-navigate-URL-of-Manage-Links-(My-Links).aspx#disqus_thread</comments>
      <guid>http://www.jamestsai.net/Blog/post.aspx?id=414ab11e-aa49-4c90-8062-e0edb63c9640</guid>
      <pubDate>Mon, 06 Oct 2008 07:16:00 -1300</pubDate>
      <category>Programming</category>
      <category>SharePoint</category>
      <dc:publisher>James</dc:publisher>
      <pingback:server>http://www.jamestsai.net/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.jamestsai.net/Blog/post.aspx?id=414ab11e-aa49-4c90-8062-e0edb63c9640</pingback:target>
      <slash:comments>151</slash:comments>
      <trackback:ping>http://www.jamestsai.net/Blog/trackback.axd?id=414ab11e-aa49-4c90-8062-e0edb63c9640</trackback:ping>
      <wfw:comment>http://www.jamestsai.net/Blog/post/How-to-use-SharePoint-Delegate-Control-to-change-the-navigate-URL-of-Manage-Links-(My-Links).aspx#disqus_thread</wfw:comment>
      <wfw:commentRss>http://www.jamestsai.net/Blog/syndication.axd?post=414ab11e-aa49-4c90-8062-e0edb63c9640</wfw:commentRss>
    </item>
    <item>
      <title>Unknown Error - Manage Links of My Links</title>
      <description>&lt;p&gt;
Do you get &amp;quot;Unknown Error&amp;quot; page when you try to access &amp;quot;Manage Links&amp;quot; page from &amp;quot;My Links&amp;quot;? Don&amp;#39;t panic.
&lt;/p&gt;
&lt;p&gt;
Many people experienced the same problem after Microsoft Office SharePoint Server SP1 update. The problem was confirmed by Microsoft and hotfix for it has been around for awhile (&lt;a href="http://support.microsoft.com/kb/952294" target="_blank" title="SharePoint Server 2007 hotfix package: May 8, 2008"&gt;KB 952294&lt;/a&gt;).
&lt;/p&gt;
&lt;p&gt;
Microsoft Help and Support:
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;em&gt;You do not have the&lt;strong&gt; Create Personal Site&lt;/strong&gt; permissions in SharePoint Server 2007 Service Pack 1. When you click the &lt;strong&gt;Manage Links&lt;/strong&gt; link, you may receive the following error message: &lt;/em&gt; 
	&lt;/p&gt;
	&lt;p&gt;
	&lt;font color="#ff0000"&gt;&lt;em&gt;An unknown error has occurred.&lt;/em&gt;&lt;/font&gt;
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
If you are looking for a quick fix, I recommend you go view and request hotfix package from Microsoft. But if you really want to customize Manage Links redirecting URL, in next post I&amp;#39;ll show you how to do it without making any changes to master page. 
&lt;/p&gt;
&lt;p&gt;
Watch this space
&lt;/p&gt;
</description>
      <link>http://www.jamestsai.net/Blog/post/Unknown-Error-Manage-Links-of-My-Links.aspx</link>
      <comments>http://www.jamestsai.net/Blog/post/Unknown-Error-Manage-Links-of-My-Links.aspx#disqus_thread</comments>
      <guid>http://www.jamestsai.net/Blog/post.aspx?id=e5908feb-8697-41ea-ba45-fb7732653559</guid>
      <pubDate>Sat, 04 Oct 2008 00:18:00 -1300</pubDate>
      <category>SharePoint</category>
      <dc:publisher>James</dc:publisher>
      <pingback:server>http://www.jamestsai.net/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.jamestsai.net/Blog/post.aspx?id=e5908feb-8697-41ea-ba45-fb7732653559</pingback:target>
      <slash:comments>112</slash:comments>
      <trackback:ping>http://www.jamestsai.net/Blog/trackback.axd?id=e5908feb-8697-41ea-ba45-fb7732653559</trackback:ping>
      <wfw:comment>http://www.jamestsai.net/Blog/post/Unknown-Error-Manage-Links-of-My-Links.aspx#disqus_thread</wfw:comment>
      <wfw:commentRss>http://www.jamestsai.net/Blog/syndication.axd?post=e5908feb-8697-41ea-ba45-fb7732653559</wfw:commentRss>
    </item>
    <item>
      <title>SharePoint Data View / Data Form Web Part - Group items by month on DateTime field</title>
      <description>&lt;p&gt;
This is one of the most popular requirements I always get from clients. Especially when they have large collection of documents and want to give their user an easy way to browse document items in Data Form Web Part (DFWP).
&lt;/p&gt;
&lt;p&gt;
For example, you have a list of documents displayed in DFWP and each document has &amp;quot;Published Date&amp;quot; field. How can you group DFWP items by its &amp;quot;Published Date&amp;quot; month value? 
&lt;/p&gt;
&lt;h2&gt;Goal&lt;/h2&gt; 
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/SharePointDataViewDataFormWebPartGroupit_10827/DFWP_GroupByMonthFinal_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/SharePointDataViewDataFormWebPartGroupit_10827/DFWP_GroupByMonthFinal_thumb.jpg" border="0" alt="James Tsai .Net SharePoint Blog - DFWP Group By Month Final" width="354" height="165" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h2&gt;Solution&lt;/h2&gt; 
&lt;p&gt;
Luckily, all you need to do is to change a few lines in XSL that renders your DFWP. Here is step by step of how to do it.
&lt;/p&gt;
&lt;h4&gt;1. Add &amp;quot;Group By&amp;quot; to Data Form Web Part.&lt;/h4&gt; 
&lt;p&gt;
Here is what your original DFWP should look like without any &amp;quot;Group by&amp;quot; on field
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/SharePointDataViewDataFormWebPartGroupit_10827/DFWP_DefaultViewWIthoutGroupOnField_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/SharePointDataViewDataFormWebPartGroupit_10827/DFWP_DefaultViewWIthoutGroupOnField_thumb.jpg" border="0" alt="James Tsai .Net SharePoint Blog - DFWP default view without Group by field" width="354" height="108" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
In SharePoint Designer (SPD), open DFWP&amp;#39;s Common Data View Tasks and select &amp;quot;Sort and Group&amp;quot;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/SharePointDataViewDataFormWebPartGroupit_10827/DFWPCommonDataViewTasks_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/SharePointDataViewDataFormWebPartGroupit_10827/DFWPCommonDataViewTasks_thumb.jpg" border="0" alt="James Tsai .Net SharePoint Blog - DFWP common data view tasks" width="271" height="164" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Select DateTime field you want to Group by, In this example it is &amp;quot;Published Date&amp;quot;. &amp;quot;Show group header&amp;quot; is also selected here because this way you can see what values are used to group items
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/SharePointDataViewDataFormWebPartGroupit_10827/DFWPSortAndGroupOptions_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/SharePointDataViewDataFormWebPartGroupit_10827/DFWPSortAndGroupOptions_thumb.jpg" border="0" alt="James Tsai .Net SharePoint Blog - DFWP sort and group options" width="354" height="193" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
After above steps, you can see the DFWP is correctly grouped on &amp;quot;Published Date&amp;quot; field. But it treats each DateTime value as a different group value.
&lt;/p&gt;
&lt;p&gt;
By default, DFWP group DateTime field based on their actual Date (YYYY-MM-DD) value. Not just year and month (YYYY-MM).
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/SharePointDataViewDataFormWebPartGroupit_10827/DFWPGroupByDateTimeFieldDefault_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/SharePointDataViewDataFormWebPartGroupit_10827/DFWPGroupByDateTimeFieldDefault_thumb.jpg" border="0" alt="James Tsai .Net SharePoint Blog - DFWP Group By DateTime Field Default" width="354" height="190" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Since requirement here is to group items with same month (item with &amp;quot;Publsihed Date&amp;quot; 08/16/2008 and 08/03/2008 in this example) in same group. Further steps are needed.
&lt;/p&gt;
&lt;h4&gt;2. Modify XSL&lt;/h4&gt; 
&lt;p&gt;
Inside the XSL that renders your DFWP, search for &amp;quot;&lt;strong&gt;dvt_groupfield&lt;/strong&gt;&amp;quot;. If you use &amp;quot;Search All&amp;quot; within XSL, &amp;lt;xsl:when test=&amp;quot;not ($dvt_groupfield)&amp;quot;&amp;gt; is the line you want.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/SharePointDataViewDataFormWebPartGroupit_10827/DFWP_XSL_SearchFor_DVT_GroupFieldt_2.jpg" class="lightbox"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/SharePointDataViewDataFormWebPartGroupit_10827/DFWP_XSL_SearchFor_DVT_GroupFieldt_thumb.jpg" border="0" alt="James Tsai .Net SharePoint Blog - DFWP XSL Search For DVT_GroupField" width="404" height="72" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
And you will see this section,
&lt;/p&gt;
&lt;p&gt;
&lt;div class="code"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:when&lt;/span&gt; &lt;span class="attr"&gt;test&lt;/span&gt;&lt;span class="kwrd"&gt;="not ($dvt_groupfield)"&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;xsl:value-of&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="ddwrt:NameChanged(string(@PublishedDate), 0)"&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;xsl:when&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt; 
&lt;/p&gt;
&lt;p&gt;
Change this to, 
&lt;/p&gt;
&lt;p&gt;
&lt;div class="code"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:when&lt;/span&gt; &lt;span class="attr"&gt;test&lt;/span&gt;&lt;span class="kwrd"&gt;="not ($dvt_groupfield)"&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;xsl:value-of&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="ddwrt:NameChanged(string(substring(@PublishedDate,1,7)), 0)"&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;xsl:when&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt; 
&lt;/p&gt;
&lt;p&gt;
Above change is critical, that&amp;#39;s where you specify how you want to group items in DFWP. 
&lt;/p&gt;
&lt;p&gt;
The original @PublishedDate value is presented in format &amp;quot;YYYY-MM-DDTHH:MM:SSZ&amp;quot;. substring(@PusblishedDate,1,7) gives us &amp;quot;YYYY-MM&amp;quot; which is what we want DFWP to group by. Note: In XSL, index starts from 1 not 0. 
&lt;/p&gt;
&lt;p&gt;
You will see this after above changes 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/SharePointDataViewDataFormWebPartGroupit_10827/DFWP_XSL_AfterChangeGroupByValue_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/SharePointDataViewDataFormWebPartGroupit_10827/DFWP_XSL_AfterChangeGroupByValue_thumb.jpg" border="0" alt="James Tsai .Net SharePoint Blog - DFWP XSL After Change Group By Value" width="354" height="160" /&gt;&lt;/a&gt;  
&lt;/p&gt;
&lt;p&gt;
Items are now group correctly, but group header still displaying incorrect text. Because In DFWP XSL, group value and header value are generated from different template. You have changed first one (in above step), and now last step is to change header value. 
&lt;/p&gt;
&lt;p&gt;
Just scroll down from where you changed group value in XSL a bit, and you should see this line 
&lt;/p&gt;
&lt;p&gt;
&lt;div class="code"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:when&lt;/span&gt; &lt;span class="attr"&gt;test&lt;/span&gt;&lt;span class="kwrd"&gt;="not (@PublishedDate) and (@PublishedDate) != false()"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:value-of&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="' '"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:when&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;xsl:otherwise&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;xsl:value-of&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="ddwrt:GenDisplayName(string(@PublishedDate))"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;
Change ddwrt:GenDisplayName(string(@PublishedDate)) to substring(@PublishedDate,1,7). Like following,
&lt;/p&gt;
&lt;p&gt;
&lt;div class="code"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:when&lt;/span&gt; &lt;span class="attr"&gt;test&lt;/span&gt;&lt;span class="kwrd"&gt;="not (@PublishedDate) and (@PublishedDate) != false()"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:value-of&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="' '"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:when&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;xsl:otherwise&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;xsl:value-of&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="substring(@PublishedDate,1,7)"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt; 
&lt;/p&gt;
&lt;p&gt;
And you should get this as result 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/SharePointDataViewDataFormWebPartGroupit_10827/DFWP_XSL_AfterChangeHeadingValues_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/SharePointDataViewDataFormWebPartGroupit_10827/DFWP_XSL_AfterChangeHeadingValues_thumb.jpg" border="0" alt="James Tsai .Net SharePoint Blog - DFWP XSL After Change Heading Values" width="354" height="162" /&gt;&lt;/a&gt;  
&lt;/p&gt;
&lt;p&gt;
You can also change Group Heading to display in format YYYY-MMM (like the one in first screen shot) , or anything you like by changing above XSL. 
&lt;/p&gt;
</description>
      <link>http://www.jamestsai.net/Blog/post/SharePoint-Data-View-Data-Form-Web-Part-Group-items-by-month-on-DateTime-field.aspx</link>
      <comments>http://www.jamestsai.net/Blog/post/SharePoint-Data-View-Data-Form-Web-Part-Group-items-by-month-on-DateTime-field.aspx#disqus_thread</comments>
      <guid>http://www.jamestsai.net/Blog/post.aspx?id=762c64e3-13b2-4ed1-a700-4e53d3cae72e</guid>
      <pubDate>Fri, 26 Sep 2008 14:54:00 -1300</pubDate>
      <category>Programming</category>
      <category>SharePoint</category>
      <dc:publisher>James</dc:publisher>
      <pingback:server>http://www.jamestsai.net/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.jamestsai.net/Blog/post.aspx?id=762c64e3-13b2-4ed1-a700-4e53d3cae72e</pingback:target>
      <slash:comments>112</slash:comments>
      <trackback:ping>http://www.jamestsai.net/Blog/trackback.axd?id=762c64e3-13b2-4ed1-a700-4e53d3cae72e</trackback:ping>
      <wfw:comment>http://www.jamestsai.net/Blog/post/SharePoint-Data-View-Data-Form-Web-Part-Group-items-by-month-on-DateTime-field.aspx#disqus_thread</wfw:comment>
      <wfw:commentRss>http://www.jamestsai.net/Blog/syndication.axd?post=762c64e3-13b2-4ed1-a700-4e53d3cae72e</wfw:commentRss>
    </item>
    <item>
      <title>Why "Start this workflow to approve publishing a major version of an item" option is disabled for my custom workflow in SharePoint?</title>
      <description>&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/WhyStartthisworkflowtoapprovepublishinga_15B7/StartWorkflowToApproveMajorV_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/WhyStartthisworkflowtoapprovepublishinga_15B7/StartWorkflowToApproveMajorV_thumb.jpg" border="0" alt="James Tsai .Net SharPoint Blog - Start Workflow To Approve Major Version Item" width="284" height="114" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
This is a common question from developer who is creating his/her first custom workflow for SharePoint.
&lt;/p&gt;
&lt;p&gt;
Turn on &amp;quot;&lt;strong&gt;Create major and minor (draft) versions&lt;/strong&gt;&amp;quot; on document library is definitely a right way to go :) But the problem usually fall in one of following two scenarios
&lt;/p&gt;
&lt;h2&gt;Scenario 1 - Missing value in InitiationType Element&lt;/h2&gt;  
&lt;p&gt;
Make sure in your workflow definition (workflow.xml) you have included &lt;strong&gt;OnMajorCheckIn &lt;/strong&gt;in &amp;lt;InitiationType&amp;gt;. For example
&lt;/p&gt;
&lt;p&gt;
&lt;div class="code"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;MetaData&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;InitiationType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Manual;#OnNewItem;#OnItemUpdate;#OnMajorCheckIn&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;InitiationType&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;MetaData&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt; 
&lt;/p&gt;
&lt;p&gt;
MSDN - &amp;quot;&lt;em&gt;If you do not specify an InitiationType element, Windows SharePoint Services treats the workflow as if the Manual, OnNewItem, and OnItemUpdate values have been specified&lt;/em&gt;&amp;quot;
&lt;/p&gt;
&lt;h2&gt;Scenario 2 - The option is enable to you, but you can&amp;#39;t select it.&lt;/h2&gt;  
&lt;p&gt;
Since &amp;quot;major and minor versions&amp;quot; only supported in Document Library. &amp;quot;Start this workflow to approve publishing a major version of an item&amp;quot; option was never meant to work with List. So make sure you only associate your custom workflow to Document Library if you want it to work. If you do it via code, make sure this is how you do it:
&lt;/p&gt;
&lt;p&gt;
&lt;div class="code"&gt;

SPList _list = _spweb.Lists[&amp;quot;Documents&amp;quot;];   &lt;br /&gt;
SPDocumentLibrary docslib = (SPDocumentLibrary)(_list)    &lt;br /&gt;
&lt;span class="rem"&gt;//Add workflow to document lib not list    &lt;br /&gt;&lt;/span&gt;
docslib.AddWorkflowAssociation(yourWorkflow);
&lt;br /&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Hope it helps
&lt;/p&gt;
</description>
      <link>http://www.jamestsai.net/Blog/post/Why-Start-this-workflow-to-approve-publishing-a-major-version-of-an-item-option-is-disabled-for-my-custom-workflow-in-SharePoint.aspx</link>
      <comments>http://www.jamestsai.net/Blog/post/Why-Start-this-workflow-to-approve-publishing-a-major-version-of-an-item-option-is-disabled-for-my-custom-workflow-in-SharePoint.aspx#disqus_thread</comments>
      <guid>http://www.jamestsai.net/Blog/post.aspx?id=2e596e27-1423-44ff-913a-c8ec2278cad5</guid>
      <pubDate>Wed, 17 Sep 2008 02:39:00 -1300</pubDate>
      <category>SharePoint</category>
      <dc:publisher>James</dc:publisher>
      <pingback:server>http://www.jamestsai.net/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.jamestsai.net/Blog/post.aspx?id=2e596e27-1423-44ff-913a-c8ec2278cad5</pingback:target>
      <slash:comments>86</slash:comments>
      <trackback:ping>http://www.jamestsai.net/Blog/trackback.axd?id=2e596e27-1423-44ff-913a-c8ec2278cad5</trackback:ping>
      <wfw:comment>http://www.jamestsai.net/Blog/post/Why-Start-this-workflow-to-approve-publishing-a-major-version-of-an-item-option-is-disabled-for-my-custom-workflow-in-SharePoint.aspx#disqus_thread</wfw:comment>
      <wfw:commentRss>http://www.jamestsai.net/Blog/syndication.axd?post=2e596e27-1423-44ff-913a-c8ec2278cad5</wfw:commentRss>
    </item>
    <item>
      <title>Understand SharePoint Permissions - Part 2. Check SharePoint user/group permissions with Permissions web service and JavaScript</title>
      <description>&lt;h1&gt;Goal&lt;/h1&gt;  
&lt;p&gt;
In &lt;a href="http://www.jamestsai.net/Blog/post/Understand-SharePoint-Permissions---Part-1-SPBasePermissions-in-Hex2c-Decimal-and-Binary---The-Basics.aspx" target="_blank" title="Understand SharePoint Permissions - Part 1. SPBasePermissions in Hex, Decimal and Binary - The Basics"&gt;Part 1.&lt;/a&gt; I have mentioned that you can check user permissions without using any of SharePoint OM, or you can perform permission check on remote site/application. In this post you are going see a simple example of how to do it.
&lt;/p&gt;
&lt;p&gt;
The goal here is to create a new web application with web service reference to &lt;strong&gt;SharePoint Permission web service&lt;/strong&gt;. This web application only has one default.aspx page with two drop down lists on it.
&lt;/p&gt;
&lt;p&gt;
First drop down list (DDL) pre-populates data with SharePoint users/groups name returned by &lt;strong&gt;GetPermissionCollection&lt;/strong&gt; method of Permissions web service. Second DDL contains list of SPBasePermissoions permissions.
&lt;/p&gt;
&lt;p&gt;
JavaScript function will be used to check if user/group selected in first DDL has permission right selected in second DDL. An image will be displayed to indicates the result.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/Und.SPBasePermissionsexampleinJavaScript_136A8/DropDownLists_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/Und.SPBasePermissionsexampleinJavaScript_136A8/DropDownLists_thumb.jpg" border="0" alt="James Tsai .Net SharePoint Blog - Two Drop Down Lists" width="261" height="136" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h1&gt;Project Setup&lt;/h1&gt;  
&lt;p&gt;
Create a new ASP.NET project with standard project template and then add Web Service reference. Two image files also included in project for displaying the result.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/Und.SPBasePermissionsexampleinJavaScript_136A8/NewWebApplicationWithWS_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/Und.SPBasePermissionsexampleinJavaScript_136A8/NewWebApplicationWithWS_thumb.jpg" border="0" alt="James Tsai .Net SharePoint Blog - New web application with WS reference" width="237" height="244" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
The web service URL is &lt;strong&gt;http://&amp;lt;site url&amp;gt;/_vti_bin/permissions.asmx &lt;/strong&gt;and we named it SharePointPermissionsService
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/Und.SPBasePermissionsexampleinJavaScript_136A8/AddPermissionWebServiceReference_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/Und.SPBasePermissionsexampleinJavaScript_136A8/AddPermissionWebServiceReference_thumb.jpg" border="0" alt="James Tsai .Net SharePoint blog - Add Permission Web Service Reference" width="404" height="283" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h1&gt;Coding&lt;/h1&gt;  
&lt;h2&gt;Create Drop Down Lists&lt;/h2&gt;    &lt;br /&gt;
&lt;div class="code"&gt;&lt;br /&gt;&lt;span class="rem"&gt;&amp;lt;!-- default.aspx --&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;style&lt;/span&gt;&lt;span class="kwrd"&gt;="float:left;"&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;asp:DropDownList&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="ddlUserGroup"&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;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;select&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="ddlPermissionSet"&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="ddlPermissionSet"&lt;/span&gt; &lt;span class="attr"&gt;onChange&lt;/span&gt;&lt;span class="kwrd"&gt;="DoPermissionCheck()"&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;option&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="0x0000000000000001"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;ViewListItems&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;option&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;option&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="0x0000000000000002"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;AddListItems&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;option&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;                &lt;span class="rem"&gt;&amp;lt;!--....................more permissions here........--&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;option&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="0x0000010000000000"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;EditMyUserInfo&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;option&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;select&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;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;="divFailed"&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;="display:none"&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;img&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;="Image/failed.gif"&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;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;="divPassed"&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;="display:none"&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;img&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;="Image/passed.gif"&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;/div&gt;
&lt;p&gt;
First div contains two drop down lists. One is ASP DropDownList control and its options are loaded from server side. And other one is normal html drop down list with options from the permissions table from &lt;a href="http://www.jamestsai.net/Blog/post/Understand-SharePoint-Permissions---Part-1-SPBasePermissions-in-Hex2c-Decimal-and-Binary---The-Basics.aspx" target="_blank" title="Understand SharePoint Permissions - Part 1. SPBasePermissions in Hex, Decimal and Binary - The Basics"&gt;Part 1&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
The first ASP DropDownList control is pre-populated with following code
&lt;/p&gt;
&lt;p&gt;
&lt;div class="code"&gt;

&lt;/p&gt;
&lt;p&gt;
&lt;span class="rem"&gt;/**default.aspx.cs**/&lt;/span&gt; 
&lt;/p&gt;
&lt;span class="rem"&gt;//Add reference to web serivce proxy we created earlier   &lt;br /&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;using&lt;/span&gt; SharePointPermissionsService; 
&lt;br /&gt;
&lt;span class="rem"&gt;//Add other references here &lt;/span&gt;
&lt;br /&gt;
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; _Default : System.Web.UI.Page    &lt;br /&gt;
{&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Page_Load(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)    &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {    &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;if&lt;/span&gt; (!IsPostBack)    &lt;br /&gt;
&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; &lt;span class="rem"&gt;/*Create web service instance*/&lt;/span&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; Permissions p = &lt;span class="kwrd"&gt;new&lt;/span&gt; Permissions();    &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="rem"&gt;/*make call to GetPermissionCollection method with site name &amp;quot;Sandbox&amp;quot; and type &amp;quot;Web&amp;quot;*/&lt;/span&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; XmlNode node = p.GetPermissionCollection(&amp;quot;Sandbox&amp;quot;, &amp;quot;Web&amp;quot;);    &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; &lt;span class="kwrd"&gt;using&lt;/span&gt; (XmlNodeReader reader = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlNodeReader(node))    &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; {    &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="rem"&gt;/*load dataset from xmlreader*/&lt;/span&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataSet ds = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataSet();&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; ds.ReadXml(reader);    &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="rem"&gt;/*data binding*/&lt;/span&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ddlUserGroup.DataSource = ds.Tables[1];    &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; ddlUserGroup.DataTextField = &amp;quot;GroupName&amp;quot;; &lt;span class="rem"&gt;//bind display text to GroupName    &lt;br /&gt;&lt;/span&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; ddlUserGroup.DataValueField = &amp;quot;Mask&amp;quot;;&amp;nbsp; &lt;span class="rem"&gt;// bind option value to Mask value    &lt;br /&gt;&lt;/span&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; ddlUserGroup.DataBind();    &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; } 
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }   &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }    &lt;br /&gt;
}
&lt;br /&gt;
&lt;p&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;
Remember, you must make sure the user running the context has permission to access SharePoint web service. Or you can use 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;p.Credentials = &amp;lt;create new credential here&amp;gt;&lt;/strong&gt; to call web service with specific credential in the code above.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;GetPermissionCollection &lt;/strong&gt;returns data in following format
&lt;/p&gt;
&lt;div class="code"&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Permissions&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;Permission&lt;/span&gt;     &lt;br /&gt;&lt;br /&gt;            &lt;span class="attr"&gt;MemberID&lt;/span&gt;&lt;span class="kwrd"&gt;="3"&lt;/span&gt;     &lt;br /&gt;&lt;br /&gt;            &lt;span class="attr"&gt;Mask&lt;/span&gt;&lt;span class="kwrd"&gt;="138612801"&lt;/span&gt;     &lt;br /&gt;&lt;br /&gt;            &lt;span class="attr"&gt;MemberIsUser&lt;/span&gt;&lt;span class="kwrd"&gt;="False"&lt;/span&gt;     &lt;br /&gt;&lt;br /&gt;            &lt;span class="attr"&gt;MemberGlobal&lt;/span&gt;&lt;span class="kwrd"&gt;="True"&lt;/span&gt;     &lt;br /&gt;&lt;br /&gt;            &lt;span class="attr"&gt;GroupName&lt;/span&gt;&lt;span class="kwrd"&gt;="Viewers"&lt;/span&gt;     &lt;br /&gt;&lt;br /&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;Permission&lt;/span&gt;     &lt;br /&gt;&lt;br /&gt;            &lt;span class="attr"&gt;MemberID&lt;/span&gt;&lt;span class="kwrd"&gt;="4"&lt;/span&gt;     &lt;br /&gt;&lt;br /&gt;            &lt;span class="attr"&gt;Mask&lt;/span&gt;&lt;span class="kwrd"&gt;="1011028719"&lt;/span&gt;     &lt;br /&gt;&lt;br /&gt;            &lt;span class="attr"&gt;MemberIsUser&lt;/span&gt;&lt;span class="kwrd"&gt;="False"&lt;/span&gt;     &lt;br /&gt;&lt;br /&gt;            &lt;span class="attr"&gt;MemberGlobal&lt;/span&gt;&lt;span class="kwrd"&gt;="True"&lt;/span&gt;     &lt;br /&gt;&lt;br /&gt;            &lt;span class="attr"&gt;GroupName&lt;/span&gt;&lt;span class="kwrd"&gt;="Sandbox Members"&lt;/span&gt;     &lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;    &lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;&amp;lt;!--.....More permissions here.....--&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;Permission&lt;/span&gt;     &lt;br /&gt;&lt;br /&gt;            &lt;span class="attr"&gt;MemberID&lt;/span&gt;&lt;span class="kwrd"&gt;="13"&lt;/span&gt;     &lt;br /&gt;&lt;br /&gt;            &lt;span class="attr"&gt;Mask&lt;/span&gt;&lt;span class="kwrd"&gt;="134287360"&lt;/span&gt;     &lt;br /&gt;&lt;br /&gt;            &lt;span class="attr"&gt;MemberIsUser&lt;/span&gt;&lt;span class="kwrd"&gt;="False"&lt;/span&gt;     &lt;br /&gt;&lt;br /&gt;            &lt;span class="attr"&gt;MemberGlobal&lt;/span&gt;&lt;span class="kwrd"&gt;="True"&lt;/span&gt;     &lt;br /&gt;&lt;br /&gt;            &lt;span class="attr"&gt;GroupName&lt;/span&gt;&lt;span class="kwrd"&gt;="Quick Deploy Users"&lt;/span&gt;     &lt;br /&gt;&lt;br /&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;Permissions&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;GetPermissionCollection&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;
Two drop down lists will be displayed as following
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/Und.SPBasePermissionsexampleinJavaScript_136A8/UserGroupNameDropDown_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/Und.SPBasePermissionsexampleinJavaScript_136A8/UserGroupNameDropDown_thumb.jpg" border="0" alt="James Tsai .Net SharePoint Blog - User Group Name Drop Down List" width="134" height="150" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/Und.SPBasePermissionsexampleinJavaScript_136A8/PermissionDropDownList_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/Und.SPBasePermissionsexampleinJavaScript_136A8/PermissionDropDownList_thumb.jpg" border="0" alt="James Tsai .Net SharePoint Blog - Permission Drop Down List" width="134" height="156" /&gt;&lt;/a&gt;     
&lt;/p&gt;
&lt;h2&gt;Create permission check function&lt;/h2&gt;  
&lt;p&gt;
Permission DDL has its onClick event registered with DoPermissionCheck() JavaScript function. DoPermissionCheck() is where you perform bitwise operation to compare user/group mask with each permission. 
&lt;/p&gt;
&lt;p&gt;
DoPermissionCheck() does four things
&lt;/p&gt;
&lt;p&gt;
1. Get selected values of both DDL
&lt;/p&gt;
&lt;p&gt;
2. Convert selected decimal value from ddlUserGroup DDL to Hex base16.
&lt;/p&gt;
&lt;p&gt;
3. Get high and low masks from user mask and permission mask (in Hex base 16)
&lt;/p&gt;
&lt;p&gt;
4. Perform &lt;strong&gt;bitwise AND&lt;/strong&gt; operation on two high masks and two low masks.
&lt;/p&gt;
&lt;p&gt;
If you look closer, you will find it has similar implementation to &lt;strong&gt;HasRights(), EqualRights(), SetCurrentPermMaskFromString()&lt;/strong&gt; functions from &lt;strong&gt;CORE.JS &lt;/strong&gt;in SharePoint. SharePoint uses these three JavaScript functions to check user permissions (like what we doing here) to display correct list item context menu for user.
&lt;/p&gt;
&lt;p&gt;
&lt;div class="code"&gt;

&lt;/p&gt;
&lt;p&gt;
&lt;span class="rem"&gt;/*default.aspx*/&lt;/span&gt;
&lt;/p&gt;
&lt;span class="kwrd"&gt;function&lt;/span&gt; DoPermissionCheck()   &lt;br /&gt;
{    &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="rem"&gt;/*get first dropdownlist selected value*/&lt;/span&gt;    &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;var&lt;/span&gt; uSelectedIndex = document.getElementById(&amp;quot;&amp;lt;%Response.Write(ddlUserGroup.ClientID);%&amp;gt;&amp;quot;).selectedIndex    &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;var&lt;/span&gt; uSelectedValue = document.getElementById(&amp;quot;&amp;lt;%Response.Write(ddlUserGroup.ClientID);%&amp;gt;&amp;quot;).options[uSelectedIndex].value    &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="rem"&gt;/*get second dropdownlist selected value*/&lt;/span&gt;    &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;var&lt;/span&gt; pSelectedIndex&amp;nbsp; = document.getElementById(&amp;quot;ddlPermissionSet&amp;quot;).selectedIndex    &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;var&lt;/span&gt; pSelectedValue = document.getElementById(&amp;quot;ddlPermissionSet&amp;quot;).options[pSelectedIndex].value&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; &lt;span class="rem"&gt;/*convert user mask to hex base 16 (use toString(16))*/&lt;/span&gt;    &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;var&lt;/span&gt; maskInDecimal = parseInt(uSelectedValue);    &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;var&lt;/span&gt; userP = maskInDecimal.toString(16);&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; &lt;span class="kwrd"&gt;var&lt;/span&gt; requiredP = pSelectedValue;    &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="rem"&gt;/*get masks length*/&lt;/span&gt;    &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;var&lt;/span&gt; requiredPL = requiredP.length;    &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;var&lt;/span&gt; userPL = userP.length;&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; &lt;span class="rem"&gt;/*get high and low permisison mask&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/span&gt;    &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;var&lt;/span&gt; requiredPermMaskH=parseInt(requiredP.substring(2, requiredPL - 8), 16);    &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;var&lt;/span&gt; requiredPermMaskL=parseInt(requiredP.substring(requiredPL - 8, requiredPL), 16);&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; &lt;span class="rem"&gt;/*get high and low user/group mask*/&lt;/span&gt;    &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;var&lt;/span&gt; userPermMaskH;    &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;var&lt;/span&gt; userPermMaskL;    &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;if&lt;/span&gt;(userP.length &amp;lt;=10 )    &lt;br /&gt;
&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; userPermMaskH=0;    &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; userPermMaskL=parseInt(userP,16);    &lt;br /&gt;
&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; &lt;span class="kwrd"&gt;else&lt;/span&gt;    &lt;br /&gt;
&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; userPermMaskH=parseInt(userP.substring(2, userPL - 8), 16);    &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; userPermMaskL=parseInt(userP.substring(userPL - 8, userPL), 16);    &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;&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; &lt;span class="rem"&gt;/*do bitwise AND operation*/&lt;/span&gt;   &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;if&lt;/span&gt;(((requiredPermMaskL &amp;amp; userPermMaskL)==requiredPermMaskL)     &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;amp;&amp;amp; ((requiredPermMaskH &amp;amp; userPermMaskH)==requiredPermMaskH))    &lt;br /&gt;
&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; document.getElementById(&amp;quot;divPassed&amp;quot;).style.display = &amp;quot;&amp;quot;;    &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; document.getElementById(&amp;quot;divFailed&amp;quot;).style.display = &amp;quot;none&amp;quot;;    &lt;br /&gt;
&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; &lt;span class="kwrd"&gt;else&lt;/span&gt;    &lt;br /&gt;
&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; document.getElementById(&amp;quot;divPassed&amp;quot;).style.display = &amp;quot;none&amp;quot;;    &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; document.getElementById(&amp;quot;divFailed&amp;quot;).style.display = &amp;quot;&amp;quot;;    &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }    &lt;br /&gt;
}
&lt;br /&gt;
&lt;p&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;
Now you can select different user/group and permission to see the image change.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/Und.SPBasePermissionsexampleinJavaScript_136A8/UserHasNoPermission_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px none " src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/Und.SPBasePermissionsexampleinJavaScript_136A8/UserHasNoPermission_thumb.jpg" border="0" alt="James Tsai .Net SharePoint Blog - User Has No Permission example" width="184" height="202" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
And of course you can implement above method in C# to perform permission check on server side. You can also extend this control to check user permissions on list level. (If your list does not inherit permissions from parent web site)
&lt;/p&gt;
&lt;p&gt;
Just change web service call to &lt;strong&gt;GetPermissionCollection(&amp;lt;list name&amp;gt;, &amp;quot;List&amp;quot;);&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Easy, isn&amp;#39;t it?
&lt;/p&gt;
</description>
      <link>http://www.jamestsai.net/Blog/post/Understand-SharePoint-Permissions-Part-2-Check-SharePoint-usergroup-permissions-with-Permissions-web-service-and-JavaScript.aspx</link>
      <comments>http://www.jamestsai.net/Blog/post/Understand-SharePoint-Permissions-Part-2-Check-SharePoint-usergroup-permissions-with-Permissions-web-service-and-JavaScript.aspx#disqus_thread</comments>
      <guid>http://www.jamestsai.net/Blog/post.aspx?id=70347365-4ab6-4f13-bcdc-1389f68ec092</guid>
      <pubDate>Sat, 13 Sep 2008 21:34:00 -1300</pubDate>
      <category>Programming</category>
      <category>SharePoint</category>
      <dc:publisher>James</dc:publisher>
      <pingback:server>http://www.jamestsai.net/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.jamestsai.net/Blog/post.aspx?id=70347365-4ab6-4f13-bcdc-1389f68ec092</pingback:target>
      <slash:comments>88</slash:comments>
      <trackback:ping>http://www.jamestsai.net/Blog/trackback.axd?id=70347365-4ab6-4f13-bcdc-1389f68ec092</trackback:ping>
      <wfw:comment>http://www.jamestsai.net/Blog/post/Understand-SharePoint-Permissions-Part-2-Check-SharePoint-usergroup-permissions-with-Permissions-web-service-and-JavaScript.aspx#disqus_thread</wfw:comment>
      <wfw:commentRss>http://www.jamestsai.net/Blog/syndication.axd?post=70347365-4ab6-4f13-bcdc-1389f68ec092</wfw:commentRss>
    </item>
    <item>
      <title>Understand SharePoint Permissions - Part 1. SPBasePermissions in Hex, Decimal and Binary - The Basics</title>
      <description>&lt;p&gt;
SPBasePermissions always reminds me of&amp;nbsp; &amp;quot;Introduction to Computer System&amp;quot; course from year one in university. It was Implemented based on the same basic and simple technique that almost used by every applications with permission system. But as high level programming language developer, we often forget how it works fundamentally.
&lt;/p&gt;
&lt;p&gt;
For example, you know by calling SPWeb.DoesUserHavePermissions() you can check permissions granted by user. But what if this method has not been implemented or when you have no reference to Microsoft.SharePoint.dll? It is time to use &amp;quot;&amp;amp;&amp;quot;,&amp;quot;^&amp;quot; operators to work out the basics.
&lt;/p&gt;
&lt;p&gt;
I am breaking this topic into two parts. Part 1. shows how is SPBasePermissions implemented. And in Part 2. you will see how to work out user permissions manually without calling DoesUserHavePermissions() or any other SharePoint code.
&lt;/p&gt;
&lt;p&gt;
&lt;div class="code"&gt;

&lt;/p&gt;
&lt;p&gt;
&lt;span class="rem"&gt;/*SPBasePermissions enum*/&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;enum&lt;/span&gt; SPBasePermissions : &lt;span class="kwrd"&gt;ulong&lt;/span&gt;    &lt;br /&gt;
{     &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; AddAndCustomizePages = 0x40000L,     &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; AddDelPrivateWebParts = 0x10000000L,     &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; AddListItems = 2L,     &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ApplyStyleSheets = 0x100000L,     &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ApplyThemeAndBorder = 0x80000L,     &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ApproveItems = 0x10L,     &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BrowseDirectories = 0x4000000L,     &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BrowseUserInfo = 0x8000000L,     &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; CancelCheckout = 0x100L,
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="rem"&gt;/*...*/&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
}
&lt;/p&gt;
&lt;p&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;
As you can see SPBasePermissions enum is representing in hex and stored as unsigned long. The complete table of permissions in both hex and decimal are in following table.
&lt;/p&gt;
&lt;p&gt;
&lt;table border="0" cellspacing="1" width="476"&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;&lt;strong&gt;Permission Name&lt;/strong&gt;&lt;/td&gt;          
			&lt;td class="style5"&gt;Hex (base 16)&lt;/td&gt;          
			&lt;td class="style5"&gt;Decimal&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;EmptyMask&lt;/td&gt;          
			&lt;td class="style5"&gt;0x0000000000000000&lt;/td&gt;          
			&lt;td class="style5"&gt;0&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style1"&gt;&lt;strong&gt;List and Document permission&lt;/strong&gt;&lt;/td&gt;          
			&lt;td class="style1"&gt;&amp;nbsp;&lt;/td&gt;          
			&lt;td class="style1"&gt;&amp;nbsp;&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;ViewListItems&lt;/td&gt;          
			&lt;td class="style5"&gt;0x000000000000&lt;font color="#ff0000"&gt;0001&lt;/font&gt;&lt;/td&gt;          
			&lt;td class="style5"&gt;1&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;AddListItems&lt;/td&gt;          
			&lt;td class="style5"&gt;0x000000000000&lt;font color="#ff0000"&gt;0002&lt;/font&gt;&lt;/td&gt;          
			&lt;td class="style5"&gt;2&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;EditListItems&lt;/td&gt;          
			&lt;td class="style5"&gt;0x000000000000&lt;font color="#ff0000"&gt;0004&lt;/font&gt;&lt;/td&gt;          
			&lt;td class="style5"&gt;4&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;DeleteListItems&lt;/td&gt;          
			&lt;td class="style5"&gt;0x000000000000&lt;font color="#ff0000"&gt;0008&lt;/font&gt;&lt;/td&gt;          
			&lt;td class="style5"&gt;8&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;ApproveItems&lt;/td&gt;          
			&lt;td class="style5"&gt;0x000000000000&lt;font color="#ff0000"&gt;0010&lt;/font&gt;&lt;/td&gt;          
			&lt;td class="style5"&gt;16&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;OpenItems&lt;/td&gt;          
			&lt;td class="style5"&gt;0x000000000000&lt;font color="#ff0000"&gt;0020&lt;/font&gt;&lt;/td&gt;          
			&lt;td class="style5"&gt;32&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;ViewVersions&lt;/td&gt;          
			&lt;td class="style5"&gt;0x000000000000&lt;font color="#ff0000"&gt;0040&lt;/font&gt;&lt;/td&gt;          
			&lt;td class="style5"&gt;64&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;DeleteVersions&lt;/td&gt;          
			&lt;td class="style5"&gt;0x000000000000&lt;font color="#ff0000"&gt;0080&lt;/font&gt;&lt;/td&gt;          
			&lt;td class="style5"&gt;128&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;CancelCheckout&lt;/td&gt;          
			&lt;td class="style5"&gt;0x000000000000&lt;font color="#ff0000"&gt;0100&lt;/font&gt;&lt;/td&gt;          
			&lt;td class="style5"&gt;256&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;ManagePersonalViews&lt;/td&gt;          
			&lt;td class="style5"&gt;0x000000000000&lt;font color="#ff0000"&gt;0200&lt;/font&gt;&lt;/td&gt;          
			&lt;td class="style5"&gt;512 &lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;ManageLists&lt;/td&gt;          
			&lt;td class="style5"&gt;0x000000000000&lt;font color="#ff0000"&gt;0800&lt;/font&gt;&lt;/td&gt;          
			&lt;td class="style5"&gt;2048&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;ViewFormPages&lt;/td&gt;          
			&lt;td class="style5"&gt;0x000000000000&lt;font color="#ff0000"&gt;1000&lt;/font&gt;&lt;/td&gt;          
			&lt;td class="style5"&gt;4096&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style1"&gt;&lt;strong&gt;Web level permission&lt;/strong&gt;&lt;/td&gt;          
			&lt;td class="style1"&gt;&amp;nbsp;&lt;/td&gt;          
			&lt;td class="style1"&gt;&amp;nbsp;&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;Open&lt;/td&gt;          
			&lt;td class="style5"&gt;0x0000&lt;font color="#ff0000"&gt;&lt;font color="#000000"&gt;0&lt;/font&gt;0000001&lt;/font&gt;0000&lt;/td&gt;          
			&lt;td class="style5"&gt;65536&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;ViewPages&lt;/td&gt;          
			&lt;td class="style5"&gt;0x0000&lt;font color="#ff0000"&gt;&lt;font color="#000000"&gt;0&lt;/font&gt;0000002&lt;/font&gt;0000&lt;/td&gt;          
			&lt;td class="style5"&gt;131072&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;AddAndCustomizePages&lt;/td&gt;          
			&lt;td class="style5"&gt;0x0000&lt;font color="#ff0000"&gt;&lt;font color="#000000"&gt;0&lt;/font&gt;0000004&lt;/font&gt;0000&lt;/td&gt;          
			&lt;td class="style5"&gt;262144&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;ApplyThemeAndBorder&lt;/td&gt;          
			&lt;td class="style5"&gt;0x0000&lt;font color="#ff0000"&gt;&lt;font color="#000000"&gt;0&lt;/font&gt;0000008&lt;/font&gt;0000&lt;/td&gt;          
			&lt;td class="style5"&gt;524288&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;ApplyStyleSheets&lt;/td&gt;          
			&lt;td class="style5"&gt;0x0000&lt;font color="#ff0000"&gt;&lt;font color="#000000"&gt;0&lt;/font&gt;0000010&lt;/font&gt;0000&lt;/td&gt;          
			&lt;td class="style5"&gt;1048576&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;ViewUsageData&lt;/td&gt;          
			&lt;td class="style5"&gt;0x0000&lt;font color="#ff0000"&gt;&lt;font color="#000000"&gt;0&lt;/font&gt;0000020&lt;/font&gt;0000&lt;/td&gt;          
			&lt;td class="style5"&gt;2097152&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;CreateSSCSite&lt;/td&gt;          
			&lt;td class="style5"&gt;0x0000&lt;font color="#ff0000"&gt;&lt;font color="#000000"&gt;0&lt;/font&gt;0000040&lt;/font&gt;0000&lt;/td&gt;          
			&lt;td class="style5"&gt;4194314&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;ManageSubwebs&lt;/td&gt;          
			&lt;td class="style5"&gt;0x0000&lt;font color="#ff0000"&gt;&lt;font color="#000000"&gt;0&lt;/font&gt;0000080&lt;/font&gt;0000&lt;/td&gt;          
			&lt;td class="style5"&gt;8388608&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;CreateGroups&lt;/td&gt;          
			&lt;td class="style5"&gt;0x0000&lt;font color="#ff0000"&gt;&lt;font color="#000000"&gt;0&lt;/font&gt;0000100&lt;/font&gt;0000&lt;/td&gt;          
			&lt;td class="style5"&gt;16777216&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;ManagePermissions&lt;/td&gt;          
			&lt;td class="style5"&gt;0x0000&lt;font color="#ff0000"&gt;&lt;font color="#000000"&gt;0&lt;/font&gt;0000200&lt;/font&gt;0000&lt;/td&gt;          
			&lt;td class="style5"&gt;33554432&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;BrowseDirectories&lt;/td&gt;          
			&lt;td class="style5"&gt;0x0000&lt;font color="#ff0000"&gt;&lt;font color="#000000"&gt;0&lt;/font&gt;0000400&lt;/font&gt;0000&lt;/td&gt;          
			&lt;td class="style5"&gt;67108864&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;BrowseUserInfo&lt;/td&gt;          
			&lt;td class="style5"&gt;0x00000&lt;font color="#ff0000"&gt;0000800&lt;/font&gt;0000&lt;/td&gt;          
			&lt;td class="style5"&gt;134217728&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;AddDelPrivateWebParts&lt;/td&gt;          
			&lt;td class="style5"&gt;0x00000&lt;font color="#ff0000"&gt;0001000&lt;/font&gt;0000&lt;/td&gt;          
			&lt;td class="style5"&gt;268435456&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;UpdatePersonalWebParts&lt;/td&gt;          
			&lt;td class="style5"&gt;0x00000&lt;font color="#ff0000"&gt;0002000&lt;/font&gt;0000&lt;/td&gt;          
			&lt;td class="style5"&gt;536870912&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;ManageWeb&lt;/td&gt;          
			&lt;td class="style5"&gt;0x00000&lt;font color="#ff0000"&gt;0004000&lt;/font&gt;0000&lt;/td&gt;          
			&lt;td class="style5"&gt;1073741824&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;UseRemoteAPIs&lt;/td&gt;          
			&lt;td class="style5"&gt;0x00000&lt;font color="#ff0000"&gt;0200000&lt;/font&gt;0000&lt;/td&gt;          
			&lt;td class="style5"&gt;137438953472&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;ManageAlerts&lt;/td&gt;          
			&lt;td class="style5"&gt;0x00000&lt;font color="#ff0000"&gt;0400000&lt;/font&gt;0000&lt;/td&gt;          
			&lt;td class="style5"&gt;274877906944&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;CreateAlerts&lt;/td&gt;          
			&lt;td class="style5"&gt;0x00000&lt;font color="#ff0000"&gt;0800000&lt;/font&gt;0000&lt;/td&gt;          
			&lt;td class="style5"&gt;549755813888&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;EditMyUserInfo&lt;/td&gt;          
			&lt;td class="style5"&gt;0x00000&lt;font color="#ff0000"&gt;1000000&lt;/font&gt;0000&lt;/td&gt;          
			&lt;td class="style5"&gt;1099511627776&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style1"&gt;&lt;strong&gt;Special Permissions&lt;/strong&gt;&lt;/td&gt;          
			&lt;td class="style1"&gt;&amp;nbsp;&lt;/td&gt;          
			&lt;td class="style1"&gt;&amp;nbsp;&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style5"&gt;EnumeratePermissions&lt;/td&gt;          
			&lt;td class="style5"&gt;0x4000000000000000&lt;/td&gt;          
			&lt;td class="style5"&gt;4611686018427387904&lt;/td&gt;       
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td class="style4"&gt;FullMask&lt;/td&gt;          
			&lt;td class="style4"&gt;0x7FFFFFFFFFFFFFFF&lt;/td&gt;          
			&lt;td class="style4"&gt;9223372036854775807&lt;/td&gt;       
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
From table above, It is obvious that each permission also represents a single binary digit. And &lt;strong&gt;bitwise OR &lt;/strong&gt;can be used when you assigning multiple permissions to single role.
&lt;/p&gt;
&lt;p&gt;
For example, users with ViewListItems, EditListItems, AddListItmes and DeleteListItems permissions will have decimal 15 or hex 0xF as their permissions mask.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0001 (0x1, 1) ViewListItems&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0010 (0x2, 2) EditListItems&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0100 (0x3, 4) AddListItmes&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;strong&gt;OR&lt;/strong&gt; 1000 (0x4, 8) DeleteListItems&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 1111 (0xF, 15)&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
This is basically how permission level works in SharePoint. - More code examples in part 2 .
&lt;/p&gt;
</description>
      <link>http://www.jamestsai.net/Blog/post/Understand-SharePoint-Permissions-Part-1-SPBasePermissions-in-Hex2c-Decimal-and-Binary-The-Basics.aspx</link>
      <comments>http://www.jamestsai.net/Blog/post/Understand-SharePoint-Permissions-Part-1-SPBasePermissions-in-Hex2c-Decimal-and-Binary-The-Basics.aspx#disqus_thread</comments>
      <guid>http://www.jamestsai.net/Blog/post.aspx?id=f3999551-3db6-4537-a25a-8cec4e7b050d</guid>
      <pubDate>Sun, 07 Sep 2008 01:43:00 -1300</pubDate>
      <category>SharePoint</category>
      <dc:publisher>James</dc:publisher>
      <pingback:server>http://www.jamestsai.net/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.jamestsai.net/Blog/post.aspx?id=f3999551-3db6-4537-a25a-8cec4e7b050d</pingback:target>
      <slash:comments>111</slash:comments>
      <trackback:ping>http://www.jamestsai.net/Blog/trackback.axd?id=f3999551-3db6-4537-a25a-8cec4e7b050d</trackback:ping>
      <wfw:comment>http://www.jamestsai.net/Blog/post/Understand-SharePoint-Permissions-Part-1-SPBasePermissions-in-Hex2c-Decimal-and-Binary-The-Basics.aspx#disqus_thread</wfw:comment>
      <wfw:commentRss>http://www.jamestsai.net/Blog/syndication.axd?post=f3999551-3db6-4537-a25a-8cec4e7b050d</wfw:commentRss>
    </item>
    <item>
      <title>SPRegionalSettings.GlobalTimeZones - How to build world clock / get time zones information in SharePoint</title>
      <description>&lt;p&gt;
Ok, you probably do not want to create world clock web part from scratch. Many free ones over Internet. Not to mention the very popular world clock web part from &amp;quot;bamboo Solutions&amp;quot;. 
&lt;/p&gt;
&lt;p&gt;
But if you really want to create one by yourself for whatever the reason is, or you just want show the local time for employees working in different cities around the world (in their profile page, maybe). It can be done easily without to use any external web services, or hack your way through windows registry to get time zones list. 
&lt;/p&gt;
&lt;p&gt;
Yes, thanks to SharePoint OM. You can get all the information you want from Microsoft.SharePoint.dll 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;SPRegionalSettings.GlobalTimeZones&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
It returns you a collection of SPTimeZones objects used in Windows SharePoint Services. 
&lt;/p&gt;
&lt;p&gt;
&lt;div class="code"&gt;
 
&lt;/p&gt;
SPTimeZoneCollection timeZoneColl = SPRegionalSettings.GlobalTimeZones; &lt;br /&gt;
&lt;span class="kwrd"&gt;foreach&lt;/span&gt; (SPTimeZone tz &lt;span class="kwrd"&gt;in&lt;/span&gt; timeZoneColl) &lt;br /&gt;
{ &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; DateTime currentLocalDateTime = DateTime.Now; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; DateTime currentDestDateTime = tz.UTCToLocalTime(currentLocalDateTime.ToUniversalTime()); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&amp;quot;ID: {0}, DateTime: {1}, Description: {2}&amp;quot;, tz.ID, currentDestDateTime.ToString(), tz.Description); &lt;br /&gt;
} 
&lt;p&gt;
&lt;/div&gt; 
&lt;/p&gt;
&lt;p&gt;
In above code sample, it loop through each SPTimeZone inside SPTimeZoneCollection. Writes ID, current date time (in local server date time format) and description in console. 
&lt;/p&gt;
&lt;p&gt;
This is what you will get 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/SPR.GlobalTimeZonesHowtobuildworldclockg_E7EB/GlobalTimeZonesjpg_2.jpg" class="lightbox" target="_blank"&gt;&lt;img style="border: 0px" src="http://www.jamestsai.net/Blog/image.axd?picture=WindowsLiveWriter/SPR.GlobalTimeZonesHowtobuildworldclockg_E7EB/GlobalTimeZonesjpg_thumb.jpg" border="0" alt="James Tsai .Net SharePoint VSTO C# ASP.NET Blog - SPRegionalSettings GlobalTimeZones Code Sample" width="604" height="343" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
As you can see, my local time in Sydney, Australia is Thursday, August 21, 2008 4:01pm. And time in Tokyo, Japan is 08/21/2008 3:01pm. In Auckland, New Zealand is 08/21/2008 6:01pm. Which are correct! 
&lt;/p&gt;
&lt;p&gt;
&lt;div class="code"&gt;
 
&lt;/p&gt;
&lt;span class="rem"&gt;//This line of code converts SPTimeZone object from UTC to your local time &lt;br /&gt;&lt;/span&gt;
DateTime currentDestDateTime = tz.UTCToLocalTime(currentLocalDateTime.ToUniversalTime()); 
&lt;p&gt;
&lt;/div&gt; 
&lt;/p&gt;
&lt;p&gt;
Basically that&amp;#39;s all you need to create world clock web part, or date time conversion control in SharePoint site. You can either have GlobalTimeZones collection as drop down list for user to select the time zone for displaying date time. Or you can create a SharePoint list mapping between cities name with time zone ID in GolbalTimeZones collection. 
&lt;/p&gt;
</description>
      <link>http://www.jamestsai.net/Blog/post/SPRegionalSettingsGlobalTimeZones-How-to-build-world-clock-get-time-zones-information-in-SharePoint.aspx</link>
      <comments>http://www.jamestsai.net/Blog/post/SPRegionalSettingsGlobalTimeZones-How-to-build-world-clock-get-time-zones-information-in-SharePoint.aspx#disqus_thread</comments>
      <guid>http://www.jamestsai.net/Blog/post.aspx?id=4c7650c1-cd93-4d0b-a2f4-7f54ad48d80f</guid>
      <pubDate>Wed, 20 Aug 2008 17:44:00 -1300</pubDate>
      <category>Programming</category>
      <category>SharePoint</category>
      <dc:publisher>James</dc:publisher>
      <pingback:server>http://www.jamestsai.net/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.jamestsai.net/Blog/post.aspx?id=4c7650c1-cd93-4d0b-a2f4-7f54ad48d80f</pingback:target>
      <slash:comments>149</slash:comments>
      <trackback:ping>http://www.jamestsai.net/Blog/trackback.axd?id=4c7650c1-cd93-4d0b-a2f4-7f54ad48d80f</trackback:ping>
      <wfw:comment>http://www.jamestsai.net/Blog/post/SPRegionalSettingsGlobalTimeZones-How-to-build-world-clock-get-time-zones-information-in-SharePoint.aspx#disqus_thread</wfw:comment>
      <wfw:commentRss>http://www.jamestsai.net/Blog/syndication.axd?post=4c7650c1-cd93-4d0b-a2f4-7f54ad48d80f</wfw:commentRss>
    </item>
  </channel>
</rss>