Here is the post
And its quoted below (just in case)
Blogger hates me so replace all the '[' and ']' with '<' and '>' respectively.
Microsoft ASP.NET AJAX 1.0 and SharePoint
Windows SharePoint Services
version 3 builds much more directly on top of ASP.NET 2.0; therefore, many of
the capabilities of ASP.NET AJAX work directly with SharePoint.
However,
in a few cases there are some compatibility issues between ASP.NET AJAX and
SharePoint which are anticipated to be addressed in the first service pack of
Windows SharePoint Services. For this reason, until that first Service Pack of
Windows SharePoint Services, we are unable to offer formal support through
Microsoft Product Support Services for usage of ASP.NET AJAX within a SharePoint
Web site. This post is intended to provide developers with some guidelines for
evaluating ASP.NET AJAX and WSS3.0.
Specifically, there are some
limitations on usages of the UpdatePanel in your web parts and controls. Some
approaches are described below to address these limitations, but these are
workarounds and as such may cause other issues in your application.
Here
are some common scenarios in SharePoint you should be able to achieve with
Microsoft ASP.NET AJAX 1.0:
Building a more powerful, re-usable JavaScript
libraries you can use in your web controls and parts
Enabling your web
services to render via JSON, resulting in easier usage in JavaScript/Ajax
Applications
Building a web part that takes advantage of Extender technology
to provide richer interaction styles, such as autocomplete on a textbox.
Using an UpdatePanel in your web part or control for more fluid, no postback
interaction. (this will require some workarounds, however.)
Adding
Microsoft ASP.NET AJAX Technology to SharePoint Pages
To extend your
SharePoint site with Microsoft ASP.NET AJAX 1.0, you’ll need to perform a few
steps.
First, you will need to download and install ASP.NET AJAX on
servers in your farm.
Second, you need to extend web.config with some
settings to enable ASP.NET AJAX technology.
Third, you will need to
add the ASP.NET AJAX Script Manager into your master page to enable scenarios
such as Extenders or UpdatePanels.
Installing ASP.NET AJAX on servers in
your farm
You will want to install the full "ASP.NET 2.0 AJAX Extensions
1.0" from ajax.asp.net.
Extending SharePoint web.config files with
Microsoft ASP.NET AJAX 1.0
Extending SharePoint web.config files with
ASP.NET AJAX requires that you interleave some Ajax registration entries in-line
with WSS registration entries. To do this you will need to edit your SharePoint
web.config file, typically in a directory like
c:\inetpub\wwwroot\wss\virtualdirectories\80.
1. Add a
[sectionGroup]element to the [configSections]tag:
[configSections]
[sectionGroup name="system.web.extensions"
type="System.Web.Configuration.SystemWebExtensionsSectionGroup,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35"]
[sectionGroup name="scripting"
type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions,
Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"]
[section name="scriptResourceHandler"
type="System.Web.Configuration.ScriptingScriptResourceHandlerSection,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" requirePermission="false"
allowDefinition="MachineToApplication"/]
[sectionGroup name="webServices"
type="System.Web.Configuration.ScriptingWebServicesSectionGroup,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35"]
[section name="jsonSerialization"
type="System.Web.Configuration.ScriptingJsonSerializationSection,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" requirePermission="false"
allowDefinition="Everywhere" /]
[section name="profileService"
type="System.Web.Configuration.ScriptingProfileServiceSection,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" requirePermission="false"
allowDefinition="MachineToApplication" /]
[section
name="authenticationService"
type="System.Web.Configuration.ScriptingAuthenticationServiceSection,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" requirePermission="false"
allowDefinition="MachineToApplication" /]
[/sectionGroup]
[/sectionGroup]
[/sectionGroup]
[/configSections]
2. Add a
[controls] section as a child of the [system.web]/[pages] tag.
[pages]
[controls]
[add tagPrefix="asp" namespace="System.Web.UI"
assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35"/]
[/controls]
[/pages]
3. Add
the following tag to the [assemblies] tag, within [compilation]:
[assemblies]
[add assembly="System.Web.Extensions,
Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/]
[/assemblies]
4. Add some new registrations to the end of the
[httpHandlers] section:
[httpHandlers]
[add verb="*" path="*.asmx"
validate="false" type="System.Web.Script.Services.ScriptHandlerFactory,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35"/]
[add verb="*" path="*_AppService.axd"
validate="false" type="System.Web.Script.Services.ScriptHandlerFactory,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35"/]
[add verb="GET,HEAD"
path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" validate="false"/]
[/httpHandlers]
5. Add a new registration to the HttpModules section, beneath any
existing registrations.
[httpModules]
[add name="ScriptModule"
type="System.Web.Handlers.ScriptModule, System.Web.Extensions,
Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/]
[/httpModules]
6. Add a SafeControl entry for the System.Web.UI
namespace from Microsoft Ajax Extensions, within the
[SharePoint]/[SafeControls]section:
[SafeControls]
[SafeControl
Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" Namespace="System.Web.UI" TypeName="*"
Safe="True" /]
[/SafeControls]
7. Finally, add the following
configuration tags at the bottom of web.config, near the bottom before the end
[configuration] tag.
[system.web.extensions]
[scripting]
[webServices]
[!-- Uncomment this line to enable the authentication
service. Include requireSSL="true" if appropriate. --]
[!--
[authenticationService enabled="true" requireSSL = "truefalse"/]
--]
[!-- Uncomment these lines to enable the profile service. To allow profile
properties to be retrieved and modified in ASP.NET AJAX applications, you need
to add each property name to the readAccessProperties and writeAccessProperties
attributes. --]
[!--
[profileService enabled="true"
readAccessProperties="propertyname1,propertyname2"
writeAccessProperties="propertyname1,propertyname2" /]
--]
[/webServices]
[!--
[scriptResourceHandler enableCompression="true"
enableCaching="true" /]
--]
[/scripting]
[/system.web.extensions]
[system.webServer]
[validation
validateIntegratedModeConfiguration="false"/]
[modules]
[add
name="ScriptModule" preCondition="integratedMode"
type="System.Web.Handlers.ScriptModule, System.Web.Extensions,
Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/]
[/modules]
[handlers]
[remove
name="WebServiceHandlerFactory-Integrated" /]
[add
name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"
type="System.Web.Script.Services.ScriptHandlerFactory,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35"/]
[add
name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd"
preCondition="integratedMode"
type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions,
Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/]
[add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD"
path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" /]
[/handlers]
[/system.webServer]
Adding a ScriptManager into a SharePoint MasterPage
Many
components of ASP.NET AJAX require the inclusion of a .NET ScriptManager control
within a page.
Although it may be possible in some cases to dynamically
insert a script manager from within a control, in many cases the control may not
be able to insert the script manager early enough in the page lifecycle
depending on how the control is used, making this tricky to get right. Also, the
control implementer will need to ensure that multiple instances of their control
(or other controls) do not result in the addition of multiple script managers
within the page. For these reasons, dynamic insertion of a ScriptManager control
from another control is not recommended.
To statically embed a script
manager into a page, it is recommended that you add the ScriptManager into the
master page of a site.
To do this, open up the master page for your
site. Typically, this will be located at [site url]/_catalogs/masterpage. You
can edit this file by opening it in an editor such as Microsoft SharePoint
Designer, or directly in Notepad by opening your master page library via DAV
(typically \\server\[pathtosite]\_catalogs\masterpage.)
Add the following
into the markup of your page. A recommended location is right beneath the
WebPartManager registration (search for [WebPartPages:SPWebPartManager id="m"
runat="Server" /]):
[asp:ScriptManager runat="server"
ID="ScriptManager1"][/asp:ScriptManager]
Using UpdatePanels within
SharePoint
UpdatePanels are a very useful addition to ASP.NET AJAX, and
represent the simplest way to convert existing, standard ASP.NET controls and
parts to take advantage of Ajax techniques. However, there are some changes
within Windows SharePoint Services which may get in the way of working with
ASP.NET AJAX.
Windows SharePoint Services JavaScript has a “form
onSubmit wrapper” which is used to override the default form action. This work
is put in place to ensure that certain types of URLs, which may contain double
byte characters, will fully work across most postback and asynchronous callback
scenarios. However, if your scenarios do not involve double byte character URLs,
you may successful disable this workaround and gain the ability to use ASP.NET
AJAX UpdatePanels.
To do this, you may need to register a client startup
script which disables this workaround, in addition to resetting the default form
action:
[script type='text/javascript']_spOriginalFormAction =
document.forms[0].action; _spSuppressFormOnSubmitWrapper=true;[/script]
This script may be directly embedded in the page, or could be emitted by
a control that uses the UpdatePanel. The following is an example of a very
simple ASP.NET Web Part which uses UpdatePanel capabilities:
using
System;
using System.Collections;
using System.Text;
using
System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI;
namespace MS.Samples
{
public class
AjaxUpdatePanelPart : WebPart
{
private Label label;
private TextBox
textBox;
protected override void CreateChildControls()
{
base.CreateChildControls();
this.EnsureUpdatePanelFixups();
UpdatePanel up = new UpdatePanel();
up.ID = "UpdatePanel1";
up.ChildrenAsTriggers = true;
up.UpdateMode =
UpdatePanelUpdateMode.Conditional;
this.Controls.Add(up);
this.textBox =
new TextBox();
this.textBox.ID = "TextBox";
up.ContentTemplateContainer.Controls.Add(this.textBox);
this.label = new
Label();
this.label.Text = "Enter your name.";
up.ContentTemplateContainer.Controls.Add(this.label);
Button button =
new Button();
button.Text = "Say Hello";
button.Click += new
EventHandler(HandleButtonClick);
up.ContentTemplateContainer.Controls.Add(button);
}
private void
HandleButtonClick(object sender, EventArgs eventArgs)
{
this.label.Text
= "Hello " + this.textBox.Text;
}
private void EnsureUpdatePanelFixups()
{
if (this.Page.Form != null)
{
string formOnSubmitAtt =
this.Page.Form.Attributes["onsubmit"];
if (formOnSubmitAtt == "return
_spFormOnSubmitWrapper();")
{
this.Page.Form.Attributes["onsubmit"] =
"_spFormOnSubmitWrapper();";
}
}
ScriptManager.RegisterStartupScript(this, typeof(AjaxUpdatePanelPart),
"UpdatePanelFixup", "_spOriginalFormAction = document.forms[0].action;
_spSuppressFormOnSubmitWrapper=true;", true);
}
}
}
Output
Caching and ASP.NET AJAX
ASP.NET AJAX infrastructure is not compatible
with output caching features. This output caching infrastructure is a featured
component of managed content pages such as those supported by web content
management features in Microsoft Office SharePoint Server. For this reason, many
scenarios which involve output cached features may not be able to take advantage
of components like UpdatePanel. However, you will be able to successfully use
other ASP.NET AJAX features, such as the JavaScript library, combined with your
output cached pages.
Compatibility with output caching is targeted for a
future release of ASP.NET AJAX infrastructure.
Conclusion
Microsoft ASP.NET AJAX 1.0 provides great building blocks for building
rich Ajax-enabled applications. Combined with the power of the SharePoint
platform, and knowing some of the integration limitations, you can build
powerful Web2.0 applications that bring together the best of both of these
technologies.