<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>With Great Power comes Great Response.write("Ability") : AutoCompleteExtender</title><link>http://blogs.msdn.com/phaniraj/archive/tags/AutoCompleteExtender/default.aspx</link><description>Tags: AutoCompleteExtender</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>How to : Use a Key Value Pair in your AutoCompleteExtender ( updated again... )</title><link>http://blogs.msdn.com/phaniraj/archive/2007/06/19/how-to-use-a-key-value-pair-in-your-autocompleteextender.aspx</link><pubDate>Tue, 19 Jun 2007 16:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3406114</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>61</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/3406114.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=3406114</wfw:commentRss><description>&amp;nbsp; 
&lt;P&gt;&lt;FONT size=2&gt;Hi all,&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;This has come up time and again on the asp.net&amp;nbsp; Ajax&amp;nbsp; forums and has become the Top Voted issue for the AutoCompleteExtender Work Items . I had some time the other day and set upon to write a fix for this .&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;How do you use&amp;nbsp;&amp;nbsp; it?&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;FONT size=2&gt;1) Attach a handler to the itemSelected Event using the OnClientItemSelected property in&amp;nbsp; the ACE markup &lt;/FONT&gt;&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;ajaxToolkit:AutoCompleteExtender&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;BehaviorID&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="AutoCompleteEx"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;ID&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="autoComplete1"&lt;/SPAN&gt;
            &lt;SPAN class=attr&gt;TargetControlID&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="myTextBox"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;ServicePath&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="~/Services/AutoComplete.asmx"&lt;/SPAN&gt;               
            &lt;SPAN class=attr&gt;ServiceMethod&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="GetCompletionListKeyValuePair"&lt;/SPAN&gt;
            ......
            &lt;FONT size=4&gt;&lt;SPAN class=attr&gt;OnClientItemSelected&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;="IAmSelected"&lt;/SPAN&gt;
        &lt;/FONT&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;ajaxToolkit:AutoCompleteExtender&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;function&lt;/SPAN&gt; IAmSelected( source, eventArgs ) {
   alert( &lt;SPAN class=str&gt;" Key : "&lt;/SPAN&gt;+ eventArgs.get_text() +&lt;SPAN class=str&gt;"  Value :  "&lt;/SPAN&gt;+eventArgs.get_value()); 
}&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;

&lt;P&gt;
&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;
&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;2) The Server-Side Method :&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;The Server-Side Method will return an array of strings as before ,&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;You create KeyValue Pairs by calling the method :&lt;/FONT&gt;&lt;/P&gt;&lt;PRE class=csharpcode&gt;AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem(&amp;lt;key&amp;gt;,&amp;lt;&lt;SPAN class=kwrd&gt;value&lt;/SPAN&gt;&amp;gt;);&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;

&lt;P&gt;&lt;FONT size=2&gt;EX:&lt;/FONT&gt;&amp;nbsp; &lt;/P&gt;&lt;PRE class=csharpcode&gt;[WebMethod]

        &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;[] GetCompletionList(&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; prefixText, &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; count)
        {

            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (count == 0)
            {

                count = 10;

            }

            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (prefixText.Equals(&lt;SPAN class=str&gt;"xyz"&lt;/SPAN&gt;))
            {

                &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;[0];

            }

            Random random = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Random();

            List&amp;lt;&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;&amp;gt; items = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; List&amp;lt;&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;&amp;gt;(count);

            &lt;SPAN class=kwrd&gt;for&lt;/SPAN&gt; (&lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; i = 0; i &amp;lt; count; i++)
            {

                &lt;SPAN class=kwrd&gt;char&lt;/SPAN&gt; c1 = (&lt;SPAN class=kwrd&gt;char&lt;/SPAN&gt;)random.Next(65, 90);

                &lt;SPAN class=kwrd&gt;char&lt;/SPAN&gt; c2 = (&lt;SPAN class=kwrd&gt;char&lt;/SPAN&gt;)random.Next(97, 122);

                &lt;SPAN class=kwrd&gt;char&lt;/SPAN&gt; c3 = (&lt;SPAN class=kwrd&gt;char&lt;/SPAN&gt;)random.Next(97, 122);

                items.Add(&lt;FONT color=#ff0000 size=4&gt;AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem&lt;/FONT&gt;(prefixText + c1 + c2 + c3, i.ToString()));

            }

            &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; items.ToArray();

        }
&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;
&lt;PRE class=csharpcode&gt;The Display of the ACE does not change , it still remains the same :&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;Once you select an item from the DropDown of the ACE , you get an alert which shows you the value of the selectedItem.&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;In Your applications , instead of the Alert , process some business logic as per your requirements.&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;Hope this is an useful Addition.&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&amp;nbsp;&lt;/PRE&gt;
&lt;P&gt;Download the Latest AjaxControlToolkit from : 
&lt;P&gt;&lt;A title=http://www.codeplex.com/AtlasControlToolkit/Release/ProjectReleases.aspx?ReleaseId=4941 href="http://www.codeplex.com/AtlasControlToolkit/Release/ProjectReleases.aspx?ReleaseId=4941" mce_href="http://www.codeplex.com/AtlasControlToolkit/Release/ProjectReleases.aspx?ReleaseId=4941"&gt;http://www.codeplex.com/AtlasControlToolkit/Release/ProjectReleases.aspx?ReleaseId=4941&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;[Update ]&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;You don't need to specify the UseKeyValuepairs attibute anymore ( in fact , its been removed :) ).&lt;/P&gt;
&lt;P&gt;The ACE script is intelligent enough to realize when Key/Value pairs are returned automatically.&lt;/P&gt;
&lt;P&gt;And also , the method CreateKeyvaluePair has been changed to CreateAutoCompleteItem.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3406114" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AutoCompleteExtender/default.aspx">AutoCompleteExtender</category></item><item><title>My Update to the AutoCompleteExtender</title><link>http://blogs.msdn.com/phaniraj/archive/2007/05/24/my-update-to-the-autocompleteextender.aspx</link><pubDate>Fri, 25 May 2007 00:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2851307</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/2851307.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=2851307</wfw:commentRss><description>&lt;p&gt;HI ,&lt;/p&gt; &lt;p&gt;&amp;nbsp;I was asked to work on the &lt;strong&gt;&lt;u&gt;beta&amp;nbsp;&amp;nbsp;&lt;/u&gt;&lt;/strong&gt;&amp;nbsp; &lt;a href="http://www.codeplex.com/AtlasControlToolkit/Wiki/View.aspx?title=PatchUtility&amp;amp;referringTitle=PatchCredit"&gt;AjaxControlToolkit Patch Utility&lt;/a&gt; Tool from the &lt;a href="http://forums.asp.net/1022.aspx"&gt;Asp.Net AjaxControlToolkit Forums&lt;/a&gt; .&lt;/p&gt; &lt;p&gt;&amp;nbsp; My first fix , which allows the first result in a result set to be automatically selected&amp;nbsp; ( if chosen to ) , has been made part of the codebase &lt;/p&gt; &lt;p&gt;and will be in the next release of the Toolkit .&lt;/p&gt; &lt;p&gt;Youc an see me in the &lt;a href="http://www.codeplex.com/AtlasControlToolkit/Wiki/View.aspx?title=PatchHallOfFame&amp;amp;referringTitle=PatchCredit"&gt;Hall of Fame&lt;/a&gt; .&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/MyUpdatetotheAutoCompleteExtender_FF9/FRSAC%5B8%5D.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="270" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/MyUpdatetotheAutoCompleteExtender_FF9/FRSAC_thumb%5B6%5D.jpg" width="901" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Default Behavior , With "FirstRowSelected" set to &lt;strong&gt;&lt;u&gt;false.&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/MyUpdatetotheAutoCompleteExtender_FF9/FRSAC3%5B4%5D.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="177" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/MyUpdatetotheAutoCompleteExtender_FF9/FRSAC3_thumb%5B2%5D.jpg" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Behavior after My patch&amp;nbsp;is part of the AjaxCotnrolToolkit , With "FirstRowSelected" set to &lt;strong&gt;&lt;u&gt;true.&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/MyUpdatetotheAutoCompleteExtender_FF9/ACEFRS1%5B10%5D.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="270" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/MyUpdatetotheAutoCompleteExtender_FF9/ACEFRS1_thumb%5B8%5D.jpg" width="487" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Link to the WorkItem my fix resolves&amp;nbsp;&amp;nbsp; &lt;a href="http://www.codeplex.com/AtlasControlToolkit/WorkItem/View.aspx?WorkItemId=9305"&gt;Be able to have the first row selected Title is required&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Hope this helps !!!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2851307" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AutoCompleteExtender/default.aspx">AutoCompleteExtender</category></item><item><title>Some Useful Links from the  ASP.NET Ajax Forums</title><link>http://blogs.msdn.com/phaniraj/archive/2007/05/10/some-useful-links-from-the-asp-net-ajax-forums.aspx</link><pubDate>Thu, 10 May 2007 23:50:39 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2529912</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/2529912.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=2529912</wfw:commentRss><description>&lt;p&gt;Hi ,&lt;/p&gt; &lt;p&gt;Over the past couple of months, I have been actively contributing to the Asp.net Ajax forums and have come across some very &lt;/p&gt; &lt;p&gt;&amp;nbsp;weird and challenging problems to solve.Anyone who's been at the forums can tell, the community is VERY Active and helpful when it comes to helping&lt;/p&gt; &lt;p&gt;out your fellow developer . Below is a list of some FAQs that I often encountered and was able to address on the&amp;nbsp; Forums .&lt;/p&gt; &lt;p&gt;Helping someone out with a brain-bender they are stuck on and seeing the issue resolved after some brainstorming is VERY satisfying.&lt;/p&gt; &lt;p&gt;Why am I doing this ? &lt;/p&gt; &lt;p&gt;There is a lot of content on the Forums and I wanna share what I learnt and was able to share with my fellow devs.&lt;/p&gt; &lt;p&gt;Also, I could have blogged about this but felt that its better to point you guys to the place where we learnt about this .&lt;/p&gt; &lt;p&gt;You might find some content duplicated from my Blog , as far as possible I have tried to avoid that and give you guys the unique ones that I have seen.&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;a title="Tough ModalPopup Extender Question ( My Favorite )" href="http://forums.asp.net/thread/1578347.aspx" target="_blank"&gt;Tough ModalPopup Extender Question ( My Favorite )&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="Assigning Multiple Triggers to an AnimationExtender" href="http://forums.asp.net/thread/1679613.aspx" target="_blank"&gt;Assigning Multiple Triggers to an AnimationExtender&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="Execute JavaScript on the client Side Before Showing a ModalPopup" href="http://forums.asp.net/thread/1667827.aspx"&gt;Execute JavaScript on the client Side Before Showing a ModalPopup&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://forums.asp.net/thread/1457306.aspx" target="_blank"&gt;Expand Accordion Pane WITHOUT clicking the header&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="Animate an Element's Property in JavaScript" href="http://forums.asp.net/thread/1623283.aspx" target="_blank"&gt;Animate an Element's Property in JavaScript&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="Using client side calculated sizes for the Resize animation" href="http://forums.asp.net/thread/1612703.aspx" target="_blank"&gt;Using client side calculated sizes for the Resize animation&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="Prevent repeat animation (animationextender) / ConditionalAnimation" href="http://forums.asp.net/thread/1621738.aspx" target="_blank"&gt;Prevent repeat animation (animationextender) / ConditionalAnimation&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="How do I use Animation without server-side controls? (mission impossible??)" href="http://forums.asp.net/thread/1578357.aspx" target="_blank"&gt;How do I use Animation without server-side controls? (mission impossible??)&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="Hyperlink to a page with Accordion and opening a specific pane" href="http://forums.asp.net/thread/1601837.aspx" target="_blank"&gt;Hyperlink to a page with Accordion and opening a specific pane&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="Change visible Accordion Pane using  JavaScript" href="http://forums.asp.net/thread/1597085.aspx" target="_blank"&gt;Change visible Accordion Pane using JavaScript&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="Combine Animate and Modal dialog functionality" href="http://forums.asp.net/thread/1597036.aspx" target="_blank"&gt;Combine Animate and Modal dialog functionality&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="Create ModalPopupExtender control dynamically client side" href="http://forums.asp.net/thread/1581774.aspx" target="_blank"&gt;Create ModalPopupExtender control dynamically client side&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;As time goes by , I will be putting up another list of issues that I helped on , &lt;/p&gt; &lt;p&gt;these are the unique ( sort-of ) ones that I could find out of all the ones that I answered .&lt;/p&gt; &lt;p&gt;If you are not a part of the Forums , get yourself an account and start helping out !&lt;/p&gt; &lt;p&gt;Hope this helps someone out there !&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2529912" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Animation/default.aspx">Animation</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AutoCompleteExtender/default.aspx">AutoCompleteExtender</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/ModalPopupExtender/default.aspx">ModalPopupExtender</category></item><item><title>HowTo : Customize Rendering of AutoCompleteExtender 1</title><link>http://blogs.msdn.com/phaniraj/archive/2007/04/09/howto-customize-rendering-of-autocompleteextender-1.aspx</link><pubDate>Mon, 09 Apr 2007 19:16:34 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2061868</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/2061868.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=2061868</wfw:commentRss><description>&lt;p&gt;&lt;strong&gt;&lt;u&gt;Registering your own handlers when Items in the SearchResults are Selected&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Hi,&lt;/p&gt; &lt;p&gt;Quite a few people have a list of changes that they want made to the AutoCompleteExtender , and the asp.net Ajax Team is working quite dilligently to solving most of these &lt;/p&gt; &lt;p&gt;in the next toolkit release .&lt;/p&gt; &lt;p&gt;I will tackle a few of the issues for those who dont want to wait until the next toolkit release.&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Registering your own handlers when Items in the SearchResults are Selected.  &lt;li&gt;Specifying your own template for how the data should be displayed.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;We will discusss Point #2 in My Next&amp;nbsp; Blog post .&lt;/p&gt; &lt;p&gt;We will achieve these functionalities by modifying the source of the AjaxControlToolkit for the File "AutoCompleteBehavior.js".&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;1.Registering your own handlers when Items in the SearchResults are Selected.&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;To achieve this , we will have to add/modify certain scripts.&lt;/p&gt; &lt;p&gt;&amp;nbsp;Lets look at the changes now .&lt;/p&gt; &lt;p&gt;1. Add a member to the class called "&lt;strong&gt;customClickHandler&lt;/strong&gt;" , which will store the Event handler to be called when an item in the list is selected.&lt;/p&gt; &lt;div&gt;&lt;pre class="csharpcode"&gt;AjaxControlToolkit.AutoCompleteBehavior.initializeBase(&lt;span class="kwrd"&gt;this&lt;/span&gt;, [element]);
Blah , blah , blah , existing declarations
&lt;span class="kwrd"&gt;this&lt;/span&gt;._customClickHandler = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
}
&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode-wrapper, .csharpcode-wrapper pre {
  background-color: #f4f4f4;
  border: solid 1px gray;
  cursor: text;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  margin: 20px 0px 10px 0px;
  max-height: 200px;
  overflow: auto;
  padding: 4px 4px 4px 4px;
  width: 97.5%;
}
.csharpcode-wrapper pre {
  border-style: none;
  margin: 0px 0px 0px 0px;
  overflow: visible;
  padding: 0px 0px 0px 0px;
}
.csharpcode, .csharpcode pre, .csharpcode .alt {
  background-color: #f4f4f4;
  border-style: none;
  color: black;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  overflow: visible;
  padding: 0px 0px 0px 0px;
  width: 100%;
}
.csharpcode pre {
  margin: 0em;
}
.csharpcode .alt {
  background-color: white;
}
.csharpcode .asp {
  background-color: #ffff00;
}
.csharpcode .attr {
  color: #ff0000;
}
.csharpcode .html {
  color: #800000;
}
.csharpcode .kwrd {
  color: #0000ff;
}
.csharpcode .lnum {
  color: #606060;
}
.csharpcode .op {
  color: #0000c0;
}
.csharpcode .preproc {
  color: #cc6633;
}
.csharpcode .rem {
  color: #008000;
}
.csharpcode .str {
  color: #006080;
}
&lt;/style&gt;
&lt;/div&gt;
&lt;p&gt;2. Provide a way for Users to specify the Eventhandler , add a function called &lt;strong&gt;"set_ClickCallBack".&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;pre class="csharpcode"&gt;AjaxControlToolkit.AutoCompleteBehavior.prototype = {
blah,blah, existing functions
set_ClickCallBack:&lt;span class="kwrd"&gt;function&lt;/span&gt;(evthandler){
    &lt;span class="kwrd"&gt;this&lt;/span&gt;._customClickHandler = Function.createDelegate(&lt;span class="kwrd"&gt;this&lt;/span&gt;, evthandler);
   }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode-wrapper, .csharpcode-wrapper pre {
  background-color: #f4f4f4;
  border: solid 1px gray;
  cursor: text;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  margin: 20px 0px 10px 0px;
  max-height: 200px;
  overflow: auto;
  padding: 4px 4px 4px 4px;
  width: 97.5%;
}
.csharpcode-wrapper pre {
  border-style: none;
  margin: 0px 0px 0px 0px;
  overflow: visible;
  padding: 0px 0px 0px 0px;
}
.csharpcode, .csharpcode pre, .csharpcode .alt {
  background-color: #f4f4f4;
  border-style: none;
  color: black;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  overflow: visible;
  padding: 0px 0px 0px 0px;
  width: 100%;
}
.csharpcode pre {
  margin: 0em;
}
.csharpcode .alt {
  background-color: white;
}
.csharpcode .asp {
  background-color: #ffff00;
}
.csharpcode .attr {
  color: #ff0000;
}
.csharpcode .html {
  color: #800000;
}
.csharpcode .kwrd {
  color: #0000ff;
}
.csharpcode .lnum {
  color: #606060;
}
.csharpcode .op {
  color: #0000c0;
}
.csharpcode .preproc {
  color: #cc6633;
}
.csharpcode .rem {
  color: #008000;
}
.csharpcode .str {
  color: #006080;
}
&lt;/style&gt;
&lt;/div&gt;
&lt;p&gt;3.Wherever the&amp;nbsp; extender's Default onclick hanlder is called, replace with this handler.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;_onListMouseDown&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;pre class="csharpcode"&gt;_onListMouseDown: &lt;span class="kwrd"&gt;function&lt;/span&gt;(ev) {
   &lt;span class="kwrd"&gt;if&lt;/span&gt; (ev.target !== &lt;span class="kwrd"&gt;this&lt;/span&gt;._completionListElement) {
       &lt;span class="kwrd"&gt;if&lt;/span&gt;( &lt;span class="kwrd"&gt;this&lt;/span&gt;._customClickHandler != &lt;span class="kwrd"&gt;null&lt;/span&gt; ){
             &lt;span class="kwrd"&gt;this&lt;/span&gt;._customClickHandler( ev.target );
       }
       &lt;span class="kwrd"&gt;else&lt;/span&gt;{
           &lt;span class="kwrd"&gt;this&lt;/span&gt;._setText(ev.target.firstChild.nodeValue);
           }
       }
   },&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode-wrapper, .csharpcode-wrapper pre {
  background-color: #f4f4f4;
  border: solid 1px gray;
  cursor: text;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  margin: 20px 0px 10px 0px;
  max-height: 200px;
  overflow: auto;
  padding: 4px 4px 4px 4px;
  width: 97.5%;
}
.csharpcode-wrapper pre {
  border-style: none;
  margin: 0px 0px 0px 0px;
  overflow: visible;
  padding: 0px 0px 0px 0px;
}
.csharpcode, .csharpcode pre, .csharpcode .alt {
  background-color: #f4f4f4;
  border-style: none;
  color: black;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  overflow: visible;
  padding: 0px 0px 0px 0px;
  width: 100%;
}
.csharpcode pre {
  margin: 0em;
}
.csharpcode .alt {
  background-color: white;
}
.csharpcode .asp {
  background-color: #ffff00;
}
.csharpcode .attr {
  color: #ff0000;
}
.csharpcode .html {
  color: #800000;
}
.csharpcode .kwrd {
  color: #0000ff;
}
.csharpcode .lnum {
  color: #606060;
}
.csharpcode .op {
  color: #0000c0;
}
.csharpcode .preproc {
  color: #cc6633;
}
.csharpcode .rem {
  color: #008000;
}
.csharpcode .str {
  color: #006080;
}
&lt;/style&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;_onKeyDown&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;pre class="csharpcode"&gt;_onKeyDown: &lt;span class="kwrd"&gt;function&lt;/span&gt;(ev) {
        &lt;span class="kwrd"&gt;var&lt;/span&gt; k = ev.keyCode ? ev.keyCode : ev.rawEvent.keyCode;
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (k === Sys.UI.Key.esc) {
            &lt;span class="kwrd"&gt;this&lt;/span&gt;._hideCompletionList();
            ev.preventDefault();
        }
        &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (k === Sys.UI.Key.up) {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;this&lt;/span&gt;._selectIndex &amp;gt; 0) {
                &lt;span class="kwrd"&gt;this&lt;/span&gt;._selectIndex--;
                &lt;span class="kwrd"&gt;this&lt;/span&gt;._highlightItem(&lt;span class="kwrd"&gt;this&lt;/span&gt;._completionListElement.childNodes[&lt;span class="kwrd"&gt;this&lt;/span&gt;._selectIndex]);
                ev.preventDefault();
            }
        }
        &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (k === Sys.UI.Key.down) {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;this&lt;/span&gt;._selectIndex &amp;lt; (&lt;span class="kwrd"&gt;this&lt;/span&gt;._completionListElement.childNodes.length - 1)) {
                &lt;span class="kwrd"&gt;this&lt;/span&gt;._selectIndex++;
                &lt;span class="kwrd"&gt;this&lt;/span&gt;._highlightItem(&lt;span class="kwrd"&gt;this&lt;/span&gt;._completionListElement.childNodes[&lt;span class="kwrd"&gt;this&lt;/span&gt;._selectIndex]);
                ev.preventDefault();
            }
        }
        &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (k === Sys.UI.Key.enter) {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;this&lt;/span&gt;._selectIndex !== -1) {
            &lt;span class="rem"&gt;//Call Custom Click Handler if registered&lt;/span&gt;
            &lt;span class="kwrd"&gt;if&lt;/span&gt;( &lt;span class="kwrd"&gt;this&lt;/span&gt;._customClickHandler == &lt;span class="kwrd"&gt;null&lt;/span&gt; ){
                &lt;span class="kwrd"&gt;this&lt;/span&gt;._setText(&lt;span class="kwrd"&gt;this&lt;/span&gt;._completionListElement.childNodes[&lt;span class="kwrd"&gt;this&lt;/span&gt;._selectIndex].firstChild.nodeValue);}
                &lt;span class="kwrd"&gt;else&lt;/span&gt; {
                &lt;span class="kwrd"&gt;this&lt;/span&gt;._customClickHandler( &lt;span class="kwrd"&gt;this&lt;/span&gt;._completionListElement );
                }
                
                ev.preventDefault();
            }
        }
        
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (k !== Sys.UI.Key.tab) {
            &lt;span class="kwrd"&gt;this&lt;/span&gt;._timer.set_enabled(&lt;span class="kwrd"&gt;true&lt;/span&gt;);
        }
    },&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode-wrapper, .csharpcode-wrapper pre {
  background-color: #f4f4f4;
  border: solid 1px gray;
  cursor: text;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  margin: 20px 0px 10px 0px;
  max-height: 200px;
  overflow: auto;
  padding: 4px 4px 4px 4px;
  width: 97.5%;
}
.csharpcode-wrapper pre {
  border-style: none;
  margin: 0px 0px 0px 0px;
  overflow: visible;
  padding: 0px 0px 0px 0px;
}
.csharpcode, .csharpcode pre, .csharpcode .alt {
  background-color: #f4f4f4;
  border-style: none;
  color: black;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  overflow: visible;
  padding: 0px 0px 0px 0px;
  width: 100%;
}
.csharpcode pre {
  margin: 0em;
}
.csharpcode .alt {
  background-color: white;
}
.csharpcode .asp {
  background-color: #ffff00;
}
.csharpcode .attr {
  color: #ff0000;
}
.csharpcode .html {
  color: #800000;
}
.csharpcode .kwrd {
  color: #0000ff;
}
.csharpcode .lnum {
  color: #606060;
}
.csharpcode .op {
  color: #0000c0;
}
.csharpcode .preproc {
  color: #cc6633;
}
.csharpcode .rem {
  color: #008000;
}
.csharpcode .str {
  color: #006080;
}
&lt;/style&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;How do you use this after modification in your applications ?&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If the behaviorID of the AutoCompleteExtender is "customAutoComplete".&lt;/p&gt;
&lt;p&gt;The Code to hookup the Custom Click handler is :&lt;/p&gt;
&lt;div&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt;  pageLoad(){
$find(&lt;span class="str"&gt;"customAutoComplete"&lt;/span&gt;).set_ClickCallBack( customClickhandler ); 
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;customClickHandler is a javascript Function .&lt;/p&gt;
&lt;div&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; customClickhandler( clickedElement ){
&lt;span class="rem"&gt;//Your Code here&lt;/span&gt;
}
&lt;/pre&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2061868" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AutoCompleteExtender/default.aspx">AutoCompleteExtender</category></item><item><title>Change ServiceMethods and Web Service for the AutoCompleteExtender From Client Side</title><link>http://blogs.msdn.com/phaniraj/archive/2007/02/16/change-servicemethods-and-web-service-for-the-autocompleteextender-from-client-side.aspx</link><pubDate>Fri, 16 Feb 2007 07:25:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1686950</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/1686950.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=1686950</wfw:commentRss><description>&lt;P&gt;This is quite a common requirement and guess the Docs are not really clear as to how you can achieve this .&lt;/P&gt;
&lt;P&gt;Lemme see how I can help&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;You want to&amp;nbsp; change the Webmethod that the AutoComplete Extender Talks to from the Client Side.&lt;/LI&gt;
&lt;LI&gt;You want to&amp;nbsp; change the WebService that the AutoComplete Extender Talks to from the Client Side.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;You can achieve this easily using the Functions Provided by the Extenders on the Client Side.&lt;/P&gt;
&lt;P&gt;Follow these Simple Steps.&lt;/P&gt;
&lt;P&gt;1) Assign a BehaviourID to the AutoCompleteExtender.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;cc1:AutoCompleteExtender&lt;/SPAN&gt; 
               &lt;SPAN class=attr&gt;ID&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="AutoCompleteImagesExtender1"&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;TargetControlID&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="myTextBox"&lt;/SPAN&gt;
                &lt;SPAN class=attr&gt;ServicePath&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="AutoComplete.asmx"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;ServiceMethod&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="GetCompletionList"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;MinimumPrefixLength&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="2"&lt;/SPAN&gt;
                &lt;SPAN class=attr&gt;CompletionInterval&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="1000"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;EnableCaching&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="true"&lt;/SPAN&gt; 
                &lt;SPAN class=attr&gt;CompletionListElementID&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="divCompletionImages"&lt;/SPAN&gt;
                &lt;SPAN class=attr&gt;CompletionSetCount&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="12"&lt;/SPAN&gt; 
                &lt;STRONG&gt;&lt;FONT size=3&gt;&lt;SPAN class=attr&gt;BehaviorID&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="autoCompleteExtender"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/STRONG&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;cc1:AutoCompleteExtender&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;2) You can change the Web Service that the AutoCompleteExtender Talks to by using the Following JavaScript.&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;function&lt;/SPAN&gt; ChangeServicePath(){
        &lt;SPAN class=kwrd&gt;var&lt;/SPAN&gt; autoComplete = $find(&lt;SPAN class=str&gt;"&lt;FONT size=3&gt;&lt;STRONG&gt;autoCompleteExtender&lt;/STRONG&gt;&lt;/FONT&gt;"&lt;/SPAN&gt;);
        autoComplete.set_servicePath( &amp;lt;NewServicePath&amp;gt;);
        }&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;As you can see the $find  method is called on the behaviourID of the AutoCompleteExtender.&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;The "set_servicePath" method allows you to Set the path to the Web Service that the Extender talks to .&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;3) You can change the Web Service that the AutoCompleteExtender Talks to by using the Following JavaScript.&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;function&lt;/SPAN&gt; ChangeServiceMethod(){
        &lt;SPAN class=kwrd&gt;var&lt;/SPAN&gt; autoComplete = $find(&lt;SPAN class=str&gt;"&lt;FONT size=6&gt;&lt;FONT size=3&gt;&lt;STRONG&gt;autoCompleteExtender&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;"&lt;/SPAN&gt;);
        autoComplete.set_serviceMethod( &amp;lt;NewServiceMethodName&amp;gt;);
        }&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;The "set_serviceMethod" method allows you to Set the path to the Web Service that the Extender talks to .&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;Hope this Helps &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&amp;nbsp;&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;

&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;

&lt;SCRIPT type=text/javascript&gt;
    if (typeof window.Delicious == "undefined") window.Delicious = {};
    Delicious.BLOGBADGE_DEFAULT_CLASS = 'delicious-blogbadge-line';
&lt;/SCRIPT&gt;

&lt;SCRIPT src="http://images.del.icio.us/static/js/blogbadge.js" mce_src="http://images.del.icio.us/static/js/blogbadge.js"&gt;&lt;/SCRIPT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1686950" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Components/default.aspx">Components</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AutoCompleteExtender/default.aspx">AutoCompleteExtender</category></item><item><title>Customizing the MS Ajax AutoCompleteExtender To Render Images Instead Of Text</title><link>http://blogs.msdn.com/phaniraj/archive/2007/02/10/customizing-the-ms-ajax-autocompleteextender-to-render-images-instead-of-text.aspx</link><pubDate>Sat, 10 Feb 2007 13:13:49 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1642056</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/1642056.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=1642056</wfw:commentRss><description>&lt;p&gt;We all know about the AutoComplete Extender from MS AJAX.&lt;/p&gt; &lt;p&gt;It looks like this .....&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/CustomizingtheMSAjaxAutoCompleteExtender_D485/AutoComplete_Original%5B3%5D.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="311" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/CustomizingtheMSAjaxAutoCompleteExtender_D485/AutoComplete_Original_thumb%5B1%5D.jpg" width="369" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I want to customize the Auto Complete behaviour to render images on the client side rather than the text nodes .&lt;/p&gt; &lt;p&gt;My Server Side WebService returns an array of image URLs. I want to change the way the Results are rendered.&lt;/p&gt; &lt;p&gt;This is how I want it to look.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/CustomizingtheMSAjaxAutoCompleteExtender_D485/AutoComplete_Modified%5B4%5D.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="245" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/CustomizingtheMSAjaxAutoCompleteExtender_D485/AutoComplete_Modified_thumb%5B2%5D.jpg" width="373" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;I know that its pretty easy to achieve the effect using the client side proxy generated for a webservice.&lt;/p&gt; &lt;p&gt;But, I need to leverage the advantages of the AJAX AutoComplete control such as&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Client Side&amp;nbsp;Caching of Web Service Results&lt;/li&gt; &lt;li&gt;Fully customisable with regard to specifying when and how the server side method call is made .&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;So, we download the Source code of the AutoComplete Extender and start our process of hacking through it to achieve what we want.&lt;/p&gt; &lt;p&gt;You can download the Source of the AjaxControlToolkit from &lt;a href="http://www.codeplex.com/AtlasControlToolkit/"&gt;Here&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Once we downloaded , we take a look at the function that renders the Search Results.&lt;/p&gt; &lt;p&gt;The Function inside the AutoComplete Extender that renders the search results is in Javascript.&lt;/p&gt; &lt;p&gt;The File&amp;nbsp; you gotta go to is AutoCompleteBehavior.js.&lt;/p&gt; &lt;p&gt;&amp;lt;Function&amp;gt;&lt;/p&gt;&lt;pre class="csharpcode"&gt;_update: &lt;span class="kwrd"&gt;function&lt;/span&gt;(prefixText, completionItems, cacheResults) {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (cacheResults &amp;amp;&amp;amp; &lt;span class="kwrd"&gt;this&lt;/span&gt;.get_enableCaching()) {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!&lt;span class="kwrd"&gt;this&lt;/span&gt;._cache) {
                &lt;span class="kwrd"&gt;this&lt;/span&gt;._cache = {};
            }
            &lt;span class="kwrd"&gt;this&lt;/span&gt;._cache[prefixText] = completionItems;
        }

        &lt;span class="kwrd"&gt;this&lt;/span&gt;._completionListElement.innerHTML = &lt;span class="str"&gt;''&lt;/span&gt;;
        &lt;span class="kwrd"&gt;this&lt;/span&gt;._selectIndex = -1;
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (completionItems &amp;amp;&amp;amp; completionItems.length) {
            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;var&lt;/span&gt; i = 0; i &amp;lt; completionItems.length; i++) {
             &lt;strong&gt;  &lt;font color="#ff8000"&gt; &lt;span class="kwrd"&gt;var&lt;/span&gt; itemElement = document.createElement(&lt;span class="str"&gt;'div'&lt;/span&gt;);
                itemElement.appendChild(document.createTextNode(completionItems[i]));
                itemElement.__item = &lt;span class="str"&gt;''&lt;/span&gt;;
                
                &lt;span class="kwrd"&gt;var&lt;/span&gt; itemElementStyle = itemElement.style;
                itemElementStyle.padding = &lt;span class="str"&gt;'1px'&lt;/span&gt;;
                itemElementStyle.textAlign = &lt;span class="str"&gt;'left'&lt;/span&gt;;
                itemElementStyle.textOverflow = &lt;span class="str"&gt;'ellipsis'&lt;/span&gt;;
                itemElementStyle.backgroundColor = &lt;span class="kwrd"&gt;this&lt;/span&gt;._textBackground;
                itemElementStyle.color = &lt;span class="kwrd"&gt;this&lt;/span&gt;._textColor;
                
                &lt;span class="kwrd"&gt;this&lt;/span&gt;._completionListElement.appendChild(itemElement);&lt;/font&gt;&lt;/strong&gt;
            }
            &lt;span class="kwrd"&gt;var&lt;/span&gt; elementBounds = CommonToolkitScripts.getBounds(&lt;span class="kwrd"&gt;this&lt;/span&gt;.get_element());        
            &lt;span class="kwrd"&gt;this&lt;/span&gt;._completionListElement.style.width = Math.max(1, elementBounds.width - 2) + &lt;span class="str"&gt;'px'&lt;/span&gt;;
            &lt;span class="kwrd"&gt;this&lt;/span&gt;._popupBehavior.show();
        }
        &lt;span class="kwrd"&gt;else&lt;/span&gt; {
            &lt;span class="kwrd"&gt;this&lt;/span&gt;._popupBehavior.hide();
        }
    }    &lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;&amp;lt;/Function&amp;gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The Lines of the function that Renders the Search Results is marked in this &lt;font color="#ff8000"&gt;&lt;strong&gt;color.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Lets study these lines&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; itemElement = document.createElement(&lt;span class="str"&gt;'div'&lt;/span&gt;);
    itemElement.appendChild(document.createTextNode(completionItems[i]));
    itemElement.__item = &lt;span class="str"&gt;''&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;
These lines of code create a "DIV" for each search result from the Web service.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;We will change it to be ...&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; itemElement = document.createElement(&lt;span class="str"&gt;'img'&lt;/span&gt;);
itemElement.src =  completionItems[i];&lt;/pre&gt;&lt;pre class="csharpcode"&gt;This would be enough to render images instead of Text .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Next, onClick of the image thumbnail , we want to assign the image url to another full image on the page.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;The function  called when the image is clicked is&lt;/pre&gt;&lt;pre class="csharpcode"&gt; _onListMouseDown: &lt;span class="kwrd"&gt;function&lt;/span&gt;(ev) {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (ev.target !== &lt;span class="kwrd"&gt;this&lt;/span&gt;._completionListElement) {
            &lt;span class="kwrd"&gt;this&lt;/span&gt;._setText(ev.target.firstChild.nodeValue);
        }
    },&lt;/pre&gt;&lt;pre class="csharpcode"&gt;We will change this to be :&lt;/pre&gt;&lt;pre class="csharpcode"&gt; _onListMouseDown: &lt;span class="kwrd"&gt;function&lt;/span&gt;(ev) {
        $get(&lt;span class="str"&gt;"imgFullBlown"&lt;/span&gt;).src = &lt;span class="kwrd"&gt;event&lt;/span&gt;.srcElement.src;
        },&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;imgFullBlown is gonna be an &amp;lt;IMG&amp;gt; tag on the page that hosts the control .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;As you can see, the src of the image that is clicked is assigned to the src of the "imgFullBlown" tag.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;The Effects are as shown below .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/CustomizingtheMSAjaxAutoCompleteExtender_D485/AutoComplete_Modified_FULL%5B4%5D.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="224" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/CustomizingtheMSAjaxAutoCompleteExtender_D485/AutoComplete_Modified_FULL_thumb%5B2%5D.jpg" width="357" border="0"&gt;&lt;/a&gt; &lt;/pre&gt;&lt;pre class="csharpcode"&gt;There you go , build the Project and change the default behaviour or build your own control by extending the AutoCompleteExtender.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;You are  only limited by your imagination.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Everyone has access to the source of some of our best controls.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1642056" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Components/default.aspx">Components</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AutoCompleteExtender/default.aspx">AutoCompleteExtender</category></item></channel></rss>