Async Triggers in ASP.Net - asp.net

I have an update panel, an async trigger and a button outside the update panel. The button is wrapped with the trigger. All this is in one form. I load this form using the .load() method (jQuery). It works fine: I press the tab and the form loads into the other form. Then, when I press the button for the first time it fires the click event, but when I press it again nothing happens. Can you please help? I have tried putting the button in and out of the update panel and it's still not working. Here's my code:
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Search" />
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" >
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1" EventName = "Click"/>
</Triggers>
<ContentTemplate>
...

If you're loading the form with jquery it may be something where you need to rebind an event, I'm not familiar with the .load method()
I assume this section of code works fine if you pull it off into a test page?

Related

UpdateProgress not showing when doPostBack is manually called from javascript

I am using update panel and update progress control. In update panel I have textbox with TextChange event. This event is automatically called from javascript when user enters 10 digits into textbox. The call is :
__doPostBack("LabelTextBoxCode", "TextChanged");
This is my html code :
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdateProgress runat="server" ID="UpdateProgress1" AssociatedUpdatePanelID="UpdatePanel">
<ProgressTemplate>
...processing
</ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel ID="UpdatePanel" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:TextBox ID="LabelTextBoxCode" runat="server" OnTextChanged="TextChanged_TextBoxCode">
</asp:TextBox>
...
</ContentTemplate>
</asp:UpdatePanel>
So far what I found is this thread UpdateProgress Not working when called thru javascript but it does not help me (I do not know how to use it right in my case).
When I press any button in update panel, progress bar is showing, problem is just with this manually called __doPostBack from javascript.
How to fix it and make updateProgress works ?
Directly calling __doPostback bypasses all the triggers that set the update panel in action. So to avoid that you can either call the OnBeginRequest handler or you can trigger the same button click instead of calling the __dopostback. To trigger button click you can make use of jquery trigger function. You can get an example here.
Hope this helps.

ASP Update Panel

I implemented an update panel with a treeview control inside. The treeview control will cause a postback via Javascript which leads to the OnNodeChecked being triggered.
I have wrapped this in an UpdatePanel control, but I still get the blinking effect on my page. I also have a scriptManager implemented in the page. Does anyone know what I can do to avoid the flicker?
<asp:UpdatePanel ID="updateTreeViewPanel" runat="server"
ChildrenAsTriggers="true" UpdateMode="Conditional">
<ContentTemplate>
<fieldset>
<asp:TreeView ID="tv_WLG" runat="server"
OnTreeNodeCheckChanged="tv_WLG_TreeNodeCheckChanged"
OnSelectedNodeChanged="tv_WLG_SelectedNodeChanged"
onclick="javascript:postBackByObject(event)"
ShowCheckBoxes="All">
</asp:TreeView>
</fieldset>
</ContentTemplate>
</asp:UpdatePanel>
I would recomend adding a trigger...
<asp:UpdatePanel>
<ContentTemplate>
...your existing code
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="tv_WLG" />
</Triggers>
</asp:UpdatePanel>
The clientside script you're targeting may occur outside the scope of the update panel however. You might try handleing your click event in the codebehind instead.
What you can do is add an onload event to the updatepanel and trigger that using __doPostback() like so. Then whenever the click event fires you can handle it in the onload event of the updatepanel
<asp:UpdatePanel ID="updateTreeViewPanel" runat="server"
ChildrenAsTriggers="true" OnLoad="UpdatePanel_Load" UpdateMode="Conditional">
<ContentTemplate>
<fieldset>
<asp:TreeView ID="tv_WLG" runat="server"
OnTreeNodeCheckChanged="tv_WLG_TreeNodeCheckChanged"
OnSelectedNodeChanged="tv_WLG_SelectedNodeChanged"
onclick="__doPostback('updateTreeViewPanel', '');"
ShowCheckBoxes="All">
</asp:TreeView>
</fieldset>
</ContentTemplate>
</asp:UpdatePanel>
The reason your current method isn't working is because the postback object needs to be an object that is being handled by the update panel. Calling doPostback() with the update panel as the object will trigger the partial postback.

ASP.NET USERCONTROL WITH UPDATE PANEL INSIDE PAGE UPDATE PANEL

I have a master page with the Scrip manager. Have one page that use the master page and inside of this page i have an updatepanel. Inside this update panel i call a UserControl that have inside other updatepanel.
So i have,
MasterPage ->
Page with updatepanel ->
UserControl with update panel
The problem is that the linkbutton event inside the usercontrol updatepanel not fires.
Any help?
<asp:UpdatePanel ID="updPost" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="linkComment" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:LinkButton ID="linkComment" runat="server"
OnClick="linkComment_Click"
CssClass="PostComment" Text="Comment" />
</ContentTemplate>
</asp:UpdatePanel>
This is the code of usercontrol.
Thanks
It looks like showCommentBox() is not returning true.

trigger an async postback for an update panel from a repeater control

I have an ASP.NET Repeater Control inside an UpdatePanel. I need to update another control when clicking in an ImageButton (inside of the Repeater template). The thing is that I can't get that to trigger.
The panel upPanelRotator is refreshed... which I don't want...I just want to call back to server to update another panel - which I'll control from the server.
Any ideas?
<asp:UpdatePanel ID="upPanelRotator" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Repeater ID="rptRotator" runat="server" OnItemCommand="rptRotator_ItemCommand">
<ItemTemplate>
<asp:ImageButton ID='imgBtn' runat="server" />
</asp:Repeater>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="imgBtn" EventName="ItemCommand" />
</Triggers>
</asp:UpdatePanel>
You should be able to add an async postback trigger to the updatepanel you want to update. Set the control id of the repeater and the "ItemCommand" event as the event name... like this:
<asp:UpdatePanel ID="updatePanel2" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="repeaterId" EventName="ItemCommand" />
</Triggers>
<ContentTemplate>
...
If PanelA has the trigger button, and you want to update PanelB, you would need to have the async postback trigger on the UpdatePanel surrounding PanelB. The problem is, you need to give the actual ID's of the buttons, which specifying imgButton like you have above won't work (because there could be many in the repeater, and async trigger requires one reference that it won't be able to find). To make this very simpe, wrap everything in the UpdatePanel, and that will make your life easier. Otherwise, you have to add the async postback triggers from code I believe.
I have right now similar situation, and I have do this so that I wrap control inside Repeater in another UpdatePanel, and I set AutoPostBack="true" of that control, and register
< asp:AsyncPostBackTrigger ControlID="imgBtn" EventName="Click"/ >
my only consideration on this is how will a such number of UpdatePanels reflect upon performance. I have small project with few DB entry's but for larger amounts of Data, I would test performance before and after such intervention.

how to remove page reload

In my application when we click on add button a Modal PopUp Extender appears in that their are 2 asp button Save and Cancel. When we click on these buttons the page gets reloaded i have to stop it.
Plz help ..
Use Ajax. How you go about this depends wholy on your design. Without Ajax, you need to post the page and have it reload. Ajax still performs the posting of the data, but it's behind the scenes from the user point of view, and you need to write scripts to handle the response.
You can add an UpdatePanel to your aspx-markup and set the buttons as AsyncPostbackTriggers, this will cause only the content of the popup to reload, not the complete page.
The result will look something like this:
<asp:ScriptManager ID="sm1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="up1" ChildrenAsTriggers="true" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="submitButton" EventName="Click" />
</Triggers>
<ContentTemplate>
<!--popup-->
</ContentTemplate>
</asp:UpdatePanel>

Resources