I couldn’t find something similar in SO.
In ASP.NET, is there any way that on cue I can cause a partial postback with Javascript in an UpdatePanel?
I tried __doPostBack() but it does a full postback.
I can trick it with a dummy button and fire click() then handle the partial postback that way, but I want a more graceful way than trickery.
Thanks.
Edit: I found this disturbedbuddha.wordpress.com/2007/11/26/… but I can’t get it to work =(
I would love for this method to work; it’s perfect for me!
So far what I can do using this last method is gain reference to the timer. With the timer initially disabled, starting the timer doesn’t seem to cause a postback. However, without Ajax, if I simply have the timer enabled initially, it posts back at intervals just fine; why can’t the Ajax call cause it?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
You can use an AsyncPostBackTrigger with the UpdatePanel to do this. Because you need something that can fire an event, using a button is fairly simple and when hidden works nicely.
If this is your markup:
<asp:UpdatePanel ID="UpdatePanel1" runat="server" OnLoad="UpdatePanel1_Load">
<ContentTemplate>
<!-- Contents... -->
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ReloadThePanel" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
<asp:Button ID="ReloadThePanel" runat="server" style="display:none;" />
When you want the panel to be updated, you just need to call:
__doPostBack('<%=ReloadThePanel.ClientID %>', null);
This will make ASP.NET think that ReloadThePanel was clicked and the JavaScript auto-generated due to the trigger will handle the rest.
EDIT
You can do a pure JavaScript update of the UpdatePanel without any triggers or hidden buttons. You just need to invoke __doPostBack with the client-side ID as the first argument.
__doPostBack('<%=UpdatePanel1.ClientID %>', null);
Method 2
I used @MatthewJacobs’ answer but I found that the call to __doPostBack caused a runtime exception on IE11. I found that the call to __doPostBack can be replaced by the following JavaScript call, which worked on both browsers I tested (IE11 and Chrome 52).
Sys.WebForms.PageRequestManager.getInstance().beginAsyncPostBack(
[ '<%=UpdatePanel1.ClientID %>' ], '<%=UpdatePanel1.ClientID %>', null
);
See Sys.WebForms.PageRequestManager.beginAsyncPostBack Method for more details.
Method 3
The solution that worked for me
ASPX
<script>
function myfunc(){
__doPostBack('<%=UpdatePanel2.ClientID%>', "");
}
</script>
<asp:UpdatePanel ID="UpdatePanel2" runat="server" OnLoad="UpdatePanel1_Load">
</asp:UpdatePanel>
.cs
protected void UpdatePanel1_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
//your code
}
}
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0