Update Panel Triggers - asp.net

Working on a page with multiple sections.
at the very top there is a "status" label.
beneath that is a section for adding new data...
beneath that is a section for updating data...
beneath that is a section for deleting data...
and...
beneath that is a section for viewing data... (repeater)
not even really concerned about the updating and deleting sections at this point... just stating that they are there so show the general layout of the page.
Now.. when I go to add new data, the submit button is set up as a trigger for an update panel that surrounds the repeater at the bottom of the page... that works perfectly... BUT its not removing the text from the text boxes or updating the status label because the page is only partialy posting back... (obviously)
when you click the button i also want the label to display ("You added data") and the text boxes to be emptied out... SOOO... i thought i'd be tricky and put an update panel around the status and the adding and setting their triggers to the same button... doesnt seem to work :-\ i usually dont bother with update panels... but this page has the potential to have A LOT of text data and formatting...
any ideas?

Figgured it out.
<asp:updatepanel id="updatepanel1" runat="server">
<contenttemplate>
<asp:label id="lblstatus" runat="server /> <br />
</contenttemplate>
<triggers>
<asp:asyncpostbacktrigger controlid="btnaddkey" eventname="Click" />
</triggers>
</asp:updatepanel>
<asp:updatepanel id="updatepanel2" runat="server">
<contenttemplate>
<asp:textbox id="tbxkeyname" runat="server />
<asp:textbox id="tbxkeytitle" runat="server />
<asp:textbox id="tbxkeyvalue" runat="server />
</contenttemplate>
<triggers>
<asp:asyncpostbacktrigger controlid="btnaddkey" eventname="Click" />
</triggers>
</asp:updatepanel>
<asp:button id="btnaddkey" runat="server" text="submit" OnClick="btnAddKey_Click" />
<asp:updatepanel id="updatepanel3" runat="server">
<contenttemplate>
<asp:repeater id="rptkeyview" runat="server">
...
</asp:repeater>
</contenttemplate>
<triggers>
<asp:asyncpostbacktrigger controlid="btnaddkey" eventname="Click" />
</triggers>
</asp:updatepanel>
Above is the basic layout of the page.... keep in mind that there is other content between each of the update panels... (i still need to add functionality to edit and delete as well)
With the btnaddkey click the following code occurs:
protected void btnAddKey_Click(object sender, EventArgs e)
{
Configuration toConfiguration = new Configuration();
toConfiguration.Title = tbxKeyTitle.Text;
toConfiguration.Name = tbxKeyName.Text;
toConfiguration.Value = tbxKeyValue.Text;
toConfiguration.AddKey();
lblStatus.Text = "New Key Added.";
BindKeys();
tbxKeyName.Text = "";
tbxKeyTitle.Text = "";
tbxKeyValue.Text = "";
}
Problem was that i need the labels and the text boxes (each in their own update panels) to all update on that one click....
using the above code it is working now

Are you saying you want multiple updatepanels on the same page?
If so see this

Related

update panel webcontrol required form field

I created a simple control which uses an update panel with a button click trigger and yes a script manager above the control. Click the button and a label is updated with the current time and this has worked fine for 6 years
Today, I changed the page to be responsive with Bootstrap but this is irrelevant to this question.
The control was added to a page which has labels and textboxes (simple form with first name / last name).
<asp:TextBox ID="txtFirstName" runat="server" CssClass="form-control input-lg" Placeholder="Your First Name" MaxLength="20" Required="true"></asp:TextBox>
If I remove:
Required="true"
and click the button in the control the date / time updates but placing this back stops the date / time updating. I need to use both as I wish for the first name to be required but also for the time to update
Simple Example:
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Label ID="lblTime" runat="server" Text=""></asp:Label>
<asp:Button ID="btnRefreshTime" runat="server" Text="Refresh Time" OnClick="btnRefreshTime_Click" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnRefreshTime" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
Code Behind:
Protected Sub btnRefreshTime_Click(sender As Object, e As EventArgs)
lblTime.Text = DateTime.Now.ToString()
End Sub
What am I doing wrong and what would I need to do to resolve it without opening the form up to abuse (script attacks) etc? I don't wish to add the following to the page directive:
ValidateRequest="false"
Thank you in advance
Probabily the button server side event is prevented to execute due to the client side validation of required = "true".
Try to change the button with somewhat else which does not trigger client side validation by design. I would try with a LinkButton.

RegisterStartupScript not working with UpdatePanel and Google Visualization charts

On my ASP.NET page I am using Google Visualization charts inside of an asp:UpdatePanel. The user selects a chart they want to see from two asp:DropDownLists and then my C# code generates the JavaScript and I then call ScriptManager.RegisterStartipScript(...). When the page first loads the first default chart (i.e. first call to RegisterStartupScript) works and I can view the javascript from View Source. It is only on the postbacks that I get a blank chart and when I then go to View Source the page didn't receive the new JavaScript and it still has the old default JavaScript from the first page load.
Here is the weird behavior. If I use the exact same code but replace my Google Chart code with alert(...); then the alert() fires every time and when I view the source the script is there.
I've tried may different things and also followed such answers as here. Below is my code and any help would be appreciated, I've had other people look at this and we are all stumped.
FYI: If I remove all UpdatePanels and related items (ScriptManager and UpdateProgress) and use ClientScript.RegisterStartupScript() then everything works fine and I get the new JavaScript code on my page and the new chart appears as it should.
<asp:ScriptManager ID="ScriptMgr" runat="server" />
<asp:UpdatePanel ID="UpdatePanelData" runat="server">
<ContentTemplate>
<p>
<asp:DropDownList ID="PlotList" runat="server" AutoPostBack="true" Width="500px"
onselectedindexchanged="PlotList_SelectedIndexChanged"></asp:DropDownList>
<asp:DropDownList ID="RangeList" runat="server" Width="125px"
style="float:right;" AutoPostBack="True"
onselectedindexchanged="RangeList_SelectedIndexChanged">
</asp:DropDownList>
<br />
<asp:Label ID="PlotDescription" runat="server" Width="100%"></asp:Label>
</p>
<div id="chart_material" class="GoogleChart" style="width:100%;height:450px;"></div>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="RangeList" EventName="SelectedIndexChanged" />
<asp:AsyncPostBackTrigger ControlID="PlotList" EventName="SelectedIndexChanged" />
</Triggers>
</asp:UpdatePanel>
<asp:UpdateProgress ID="UpdateProgressData" runat="server" DisplayAfter="500">
<ProgressTemplate>
<div class="LoadingPanel">
<asp:Image ID="LoadingImage" runat="server" ImageUrl="~/Images/loading_2.gif" AlternateText="Loading ..." ToolTip="Loading ..." style="padding: 10px;position:fixed;top:45%;left:50%;" />
</div>
</ProgressTemplate>
</asp:UpdateProgress>
And my C# code looks like this. The function DisplayPlot is called from the two DropDownList events and each list passes in themselves as 'control'.
private void DisplayPlot(Control control)
{
PlotInformation Plot = new PlotInformation(ChartDivID);
double Range = Convert.ToDouble(RangeList.SelectedValue);
string JavaScript = Plot.GetPlotScript(PlotList.SelectedItem.Text, Range);
PlotDescription.Text = Plot.GetDataPlotDescription(PlotList.SelectedItem.Text);
//string TestScript = "<script type=\"text/javascript\">\n\talert('" + PlotList.SelectedItem.Text + "');\n</script>";
ScriptManager.RegisterStartupScript(control, control.GetType(), ScriptKey, JavaScript, false);
//ScriptManager.RegisterStartupScript(control, this.GetType(), ScriptKey, JavaScript, false);
//if (!ClientScript.IsStartupScriptRegistered(ScriptKey))
// ClientScript.RegisterStartupScript(this.GetType(), ScriptKey, JavaScript);
}
I know this is late, but I spent a lot of time on the same bug.
Try changing:
ScriptManager.RegisterStartupScript(control, control.GetType(), ScriptKey,
JavaScript, false);
To
ScriptManager.RegisterStartupScript(UpdatePanelData, UpdatePanelData.GetType(), ScriptKey,
JavaScript, false);

can an Asp:Update Panel be Updated in a for loop, Simmilar To DoEvents() in windows forms

i have been trying to get an update panel to add controls to the screen as the code runs through a for look in the Back end C# code.
i have attempted this a lot of different ways, but no matter what i do i cant achieve this
is this possible to do using ASP.NET?
here is a simple example of what i mean.
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID='mng' runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UPPnl" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Add5" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:PlaceHolder ID="Place" runat="server"></asp:PlaceHolder>
<asp:Button ID="Add5" runat="server" Text="Add 5" OnClick="Add5_Click" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
And the Code Behind
protected void Add5_Click(object sender, EventArgs e)
{
for (int i = 0; i < 5; i++)
{
Place.Controls.Add(new LiteralControl("Test" + i + "<br />"));
UPPnl.Update();
}
}
I was hoping i would get a new line of text every time i debug through the Update method. but this does not seem to want to work
Any Idea's?
Try adding this line in your Page_Load:
ScriptManager1.RegisterAsyncPostBackControl(Add5);

Force refresh image in update panel

I have a button and an image in update panel. How do I force the image refresh by clicking on the button?
update
<b>Enter the code</b>
<asp:UpdatePanel runat="server">
<ContentTemplate>
<uc:TextBox ID="txtCaptcha" runat="server" />
<asp:Button ID="btnRefreshCaptcha" runat="server" Text="Refresh the code" CausesValidation="false" onclick="btnRefreshCaptcha_Click" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnRefreshCaptcha" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
Add random value parameter to the end of your image url and change that on each update
kind of ImageUrl = baseUrl + "?" + new Random().Next()
Did you try
Sub btnRefresh_Click() Handles btnRefresh.Click
Me.Image.ImageUrl = "path to your image file"
End Sub
i used the above code but it shows the script problem in dropdown list what i gave it in master page and call them as a class files in every pages.After using the above code in my coding and i refresh the captcha it shows the overload of dropdownlist in my page and refreshment of captcha works only once after tis problem occurs i cant to refresh the captcha image in my page.

Ajax callback UpdatePanel.Update() still reloading whole page

I have code in an Update Panel and even though on a button click i am inserting data into a db and simply calling Updatepanel.Update() the whole page is reloaded:
Gifts.ASPX
<table style="width:100%;">
<tr>
<td>
<asp:Label ID="Label2" runat="server" Text="Gift"></asp:Label>
</td>
<td>
<asp:UpdatePanel ID="UpdatePanel3" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:TextBox ID="txtNewGift" runat="server"></asp:TextBox>
</ContentTemplate>
</asp:UpdatePanel>
</td>
</tr>
<tr>
Gifts.aspx.CS
protected void cmdAddGift_Click(object sender, EventArgs e)
{
OleDbConnection objConn = new OleDbConnection(DataSource);
Random r = new Random();
int giftID = r.Next(1200, 14000);
OleDbCommand objCommand = new OleDbCommand("Insert into Gifts (GiftID, Description) values (" + giftID + ",'" + txtNewGift.Text + "')", objConn);
ExecuteCommand(objCommand);
PopulateGifts(objConn);
txtNewGift.Text = "";
UpdatePanel3.Update();
}
Any ideas why this whole page would reload instead of just the textbox getting update?
Where is the button in the above example? Inside or outside the UpdatePanel. If it is outside you will need to add it to the triggers collection of the UpdatePanel.
Also you only need to call UpdatePanel.Update() if you are changing the content of an UpdatePanel other than the one that caused the (Partial) postback.
As a side note (and personal crusade), it is recommended that a using statement is put around your DB connection.
With the markup below, the following will happen:
btnInnerPart is inside the update panel, so it will automatically cause a partial postback
btnInnerFull will cause a full postback as it has a PostBackTrigger in the trigger collection
btnOuterPart will cause a partial postback as it has an AsyncPostBackTrigger in the trigger collection
btnOuterFull will cause a full postback as it is outside the UpdatePanel
Markup:
<asp:UpdatePanel runat="server">
<ContentTemplate>
<!-- Content -->
<asp:Button runat="server" ID="btnInnerPart" Text="Inner Part" />
<asp:Button runat="server" ID="btnInnerFull" Text="Inner Full" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnOuterPart" />
<asp:PostBackTrigger ControlID="btnInnerFull" />
</Triggers>
</asp:UpdatePanel>
<asp:Button runat="server" ID="btnOuterFull" Text="Outer Full" />
<asp:Button runat="server" ID="btnOuterPart" Text="Outer Part" />
Where is the button on Gifts.ASPX? If you put the button inside the UpdatePanel or use triggers you don't need to call UpdatePanel3.Update(); from the code behind.
Also, You need to have a ScriptManager object on your page. Do you have one?
please check tag of update panel...you have to specify the trigger controls for update panel on on which the update panel will get update

Resources