Hi, I recently worked on an ASP.NET control that had an update panel in it and we put the control into a custom field type in MOSS. The code I used was similar to what you have, with a couple of exceptions:
* In the OnInit event of the control is where I create the button and
wire up the event, not in CreateChildControls
* In CreateChildControls I add the script manager like this:
ScriptManager sm;
if (ScriptManager.GetCurrent(this.Page) != null)
{
sm = ScriptManager.GetCurrent(this.Page);
}
else
{
sm = new ScriptManager();
Controls.Add(sm);
}
I don't add the ScriptManager to the master pages controls, I just slip it onto
the page when I create the other child controls and this seems to work fine
I think you will find that if you move the code that wires up your event to the
OnInit event it will help. The CreateChildControls method will actually run on
every post back (I'm pretty sure anyway, I can't remember exactly), but your
event needs to be wired up before that happens which is why you are seeing
CreateChildControls running instead of you button click handler - what actually
should be happening is they should both run
Brian Farnhill
L2 Consultant
Technical Consulting
Mobile: 0408 289 303
Fax: 02 8001 7778
Email: [EMAIL PROTECTED]<mailto:[EMAIL PROTECTED]>
Web: www.uniqueworld.net<http://www.uniqueworld.net>
Blog: pointstoshare.spaces.live.com<http://pointstoshare.spaces.live.com/>
[cid:[email protected]]
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Sharepoint
Consultant
Sent: Tuesday, 5 August 2008 1:23 PM
To: [email protected]
Subject: [OzMOSS] Ajax webpart - please help
Hi,
I am trying to create a simple ajax webpart, however all the Microsoft
sugguestions seem to be failing.
I have installed Ajax and updated the web.config.
The issue is with the scriptmanager. When I run the sample code below I get the
following exception when adding the scripmanager to the masterpage
"The control collection cannot be modified during DataBind, Init, Load,
PreRender or Unload phases."
If I use the following code rather than Page.Master.Page.Controls.AddAt(1,
scriptManager), I don't get an exception, but when the user clicks the button,
CreateChildControls is called rather than HandleButtonClick
if (ScriptManager.GetCurrent(this.Page) == null)
{
ScriptManager Manager = new ScriptManager();
Manager.EnablePartialRendering = true;
this.Controls.AddAt(0, Manager);
}
Could somone please help. I would rather add the scriptmanager dynamically if
possible.
THANKS.
SAMPLE CODE
private Label label;
private TextBox textBox;
private ScriptManager scriptManager;
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
// Let's find if the ScriptManager exists and add it if not
scriptManager = ScriptManager.GetCurrent(Page);
if (scriptManager == null)
{
scriptManager = new ScriptManager();
if (Page.Form != null)
{
Page.Master.Page.Controls.AddAt(1, scriptManager)
}
}
}
protected override void CreateChildControls()
{
base.CreateChildControls();
this.EnsureUpdatePanelFixups();
UpdatePanel up = new UpdatePanel();
up.ID = "UpdatePanel1";
up.ChildrenAsTriggers = true;
up.UpdateMode = UpdatePanelUpdateMode.Conditional;
this.Controls.AddAt(1, up);
this.textBox = new TextBox();
this.textBox.ID<http://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);
}
}
}
------------------------------------------------------------------- OzMOSS.com
- to unsubscribe from this list, send a message back to the list with
'unsubscribe' as the subject.
Powered by mailenable.com
------------------------------------------------------------------- OzMOSS.com
- to unsubscribe from this list, send a message back to the list with
'unsubscribe' as the subject.
Powered by mailenable.com
<<inline: image001.jpg>>
