Considere o seguinte cenário:
- Usar o Microsoft AJAX 1.0 Control toolkit para o Microsoft ASP.NET ou as extensões AJAX 1.0 do ASP.NET criar uma Web Part personalizada para um site da Web Microsoft Office SharePoint Server 2007 ou para um Microsoft Windows site do SharePoint Services 3.0.
- A Web Part personalizada contém um controle UpdatePanel que inclui uma função _doPostBack() , como um controle LinkButton.
- Você adicionar a Web Part personalizada para um site do SharePoint Services 2007 ou a um site do Windows SharePoint Services 3.0. A URL do site Web do Windows SharePoint Services 3.0 ou o site do SharePoint Server 2007 contém caracteres internacionais ou caracteres específicos do idioma.
- Você visitar o site do Windows SharePoint Services 3.0 ou o site do SharePoint Server 2007. Em seguida, tentar atualizar o conteúdo selecionado na Web Part.
Nesse cenário, uma solicitação de postback regular ocorre em vez de uma solicitação de postback assíncrona do ASP.NET AJAX.
Esse problema ocorre porque o Windows SharePoint Services e ASP.NET AJAX cache alguns tipos de ações do formulário. Portanto, podem ocorrer conflitos.
Para contornar esse problema, use código que se pareça com o exemplo a seguir para adicionar um controle
UpdatePanel em uma Web Part no SharePoint Server 2007 ou no Windows SharePoint Services 3.0.
private void EnsureUpdatePanelFixups()
{
if (this.Page.Form != null)
{
String fixupScript = @"
_spBodyOnLoadFunctionNames.push(""_initFormActionAjax"");
function _initFormActionAjax()
{
if (_spEscapedFormAction == document.forms[0].action)
{
document.forms[0]._initialAction = document.forms[0].action;
}
}
var RestoreToOriginalFormActionCore = RestoreToOriginalFormAction;
RestoreToOriginalFormAction = function()
{
if (_spOriginalFormAction != null)
{
RestoreToOriginalFormActionCore();
document.forms[0]._initialAction = document.forms[0].action;
}
} o código a seguir é um exemplo de uma Web Part que inclui o controle
UpdatePanel anterior. Additionally, the
EnsureUpdatePanelFixups method is used to register the Script Manager control in the Web Part.
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);
LinkButton button = new LinkButton();
button.Text = "Say Hello";
button.ID = "HelloButton"; // Some controls need an ID to make them work with AJAX postbacks.
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 fixupScript = @"
_spBodyOnLoadFunctionNames.push(""_initFormActionAjax"");
function _initFormActionAjax()
{
if (_spEscapedFormAction == document.forms[0].action)
{
document.forms[0]._initialAction = document.forms[0].action;
}
}
var RestoreToOriginalFormActionCore = RestoreToOriginalFormAction;
RestoreToOriginalFormAction = function()
{
if (_spOriginalFormAction != null)
{
RestoreToOriginalFormActionCore();
document.forms[0]._initialAction = document.forms[0].action;
}
}
";
ScriptManager.RegisterStartupScript(this, typeof(AjaxUpdatePanelPart), "UpdatePanelFixup", fixupScript, true);
}
}
}