Trying to develope an Ajax webpart with aspx.net 2.0 I came up with this msdn example which seemed to be exactly what I was looking for. I followed the steps suggested by the article but I ended up with some weird behaviour from the webpart when finally deployed in my Sharepoint server.
Apparently everything was working as expected and when I clicked the webpart the first time, the ajax method was correctly executed and the “Hello! XXX” text succesfully displayed. However, clicking again the button didn’t seem to do anything, also, other page actions that should submit the form and do some action (like the “Edit Page” item from the “Site Actions” menu) stopped working.
I finally found that the problem was in the EnsurePanelFix function of the example which was not working as expected
private void EnsurePanelFix() { 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(SayHelloWebPart), "UpdatePanelFixup", fixupScript, true); } }
So what I did is to provide my own implementation of that function. What we needed is to invalidate the onSubmit wrapper that Sharepoint calls in order to ensure some callback scenarios, this can be done by setting to true the _spSuppressFormOnSubmitWrapper variable so I replaced the original function by the following implementation
private void EnsurePanelFix() { ScriptManager.RegisterStartupScript (this, typeof(AjaxEnabledWebpart), "UpdatePanelFixup", "_spOriginalFormAction = document.forms[0].action; _spSuppressFormOnSubmitWrapper=true;", true); }
And that’s it ! my Ajax webpart is working properly no matter how many times we click the Hello World ! button 🙂
[…] The only relevant code from the AjaxEnabledWebpart is the CreateChildControls method, which creates the UpdatePanel control and calls the virtual method CreatePanelControls passing as a parameter the control collection where child pages are supposed to add the controls. Also, you can find the EnsurePanelFix implementation on my previous post at this link […]
[…] Ajax enabled webpart not working on second postback […]
Thank you so much. My two days of seach for this problem ended here. I was trying to use some ajax controls on an asp.net page which was part of a custom workflow.
Thanks. Fantastic job.
FYI… This is working for a custom ASP.NET page that we are integrating in SharePoint. So it works for more than just webparts.
Excellent!!!
Same here, this solution works for a custom layout page. Many thanks =)
OMG! Thanks!
such an elegant solution.
OMG THanks , You’re cheese’nhee-us ,I would never know this.
Thanks that solved my problem.
It Seems to me Microsoft never posts the appropriate Solutions. This is the second time I follow Microsoft MSDN article, End up with Errors and Wierd stuff.
I try this sample. It doesn’t work in moss SP1. Updatepanel not refresh accordingly at all. It only work without SP1. Is it this sample test in moss SP1? Any idea?
I am using Ajax model pop extender. Using a Link button i try to open the pop up window. After doing some fuctionality in POP up i need that link button will be disabled. It is disabling first time. But second post back it still remains enable. If any body has some solution than please suggest. Thanks in advance.
Pankaj
Хм,согласен с предыдущими блоггерами
^..^ 🙂
Thanks so much for this solution. I spent alot of time trying to figure this one out. Now my code works.
hey ur my god. ur solution help me a lot.
thanks dude
thank u very much.
hats-off to u.
regards
Raj