Artigo: 941955 - Última revisão: quarta-feira, 10 de Outubro de 2007 - Revisão: 1.1

Uma peça Web que contém um controlo ASP.NET AJAX 1.0 UpdatePanel que utiliza a função _doPostBack() não funciona quando o URL do Web site anfitrião contém caracteres internacionais

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Reduzir tudo

Sintomas

Considere o seguinte cenário:
  • Utilizar o toolkit de controlo do Microsoft AJAX 1.0 para o Microsoft ASP.NET ou as extensões de 1.0 AJAX para o ASP.NET criar uma peça Web personalizada para um Microsoft Office SharePoint Server 2007 Web site ou para o Microsoft Windows 3.0 Web site do SharePoint Services.
  • A peça Web contém um controlo UpdatePanel que inclua uma função _doPostBack() , tal como um controlo LinkButton.
  • Adiciona a peça Web personalizada para dos serviços de 2007 Web site do SharePoint ou a um Windows SharePoint Services 3.0 Web site. O URL do site Web do Windows SharePoint Services 3.0 ou o Web site do SharePoint Server 2007 contém caracteres internacionais ou caracteres específicos de idioma.
  • Visitar o Windows SharePoint Services 3.0 Web site ou o Web site do SharePoint Server 2007. Em seguida, tenta actualizar o conteúdo seleccionado na peça Web.
Neste cenário, ocorre um pedido de reposição normal em vez de um pedido de reposição do AJAX ASP.NET assíncrono.

Causa

Este problema ocorre porque o Windows SharePoint Services e AJAX ASP.NET coloca em cache alguns tipos de acções do formulário. Por conseguinte, poderão ocorrer conflitos.

Como contornar

Para contornar este problema, utilize código semelhante ao exemplo que se segue para adicionar um controlo UpdatePanel uma peça Web 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 seguinte é um exemplo de uma peça Web que inclui o controlo 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);
            }
        }
    }

A informação contida neste artigo aplica-se a:
  • Microsoft Office SharePoint Server 2007
  • Microsoft Windows SharePoint Services 3.0
Palavras-chave: 
kbmt kbexpertiseinter kbtshoot kbprb KB941955 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 941955  (http://support.microsoft.com/kb/941955/en-us/ )