Javascript - How To Retain Script Block On A Partial Postback
Nov 20, 2010
This is a problem I'm facing in a webapp I'm currently working on. So instead of cluttering the question with unrelated code, I recreated the problem in an isolated, simplified webapp that only demonstrates this issue.
I have a web user control with just this as its content:
And its codebehind has nothing more than the boolean definition of ShowAlertScript. This represents a control I have in the big webapp that has two modes: input mode, and display mode. When in input mode, it has a large javascript block that is only useful then; it does some cool stuff to help the user input the info.The way this control is laid out in the big picture is as follows:
When you click btnSwitch, it simply switches to the second view with the user control. Notice how I have the ShowAlertScript already initialized to true. The potential output is that since I'm "showing the alert script" within the user control, the AlertMe() function will execute when you click the input-button element, because it's written out according to the inline if statement.
If you run this code I gave you so far as is, it will not work. The browser will say it can't see the AlertMe() function; it's undefined as far as it knows. But if you take out the UpdatePanel (or disable the ScriptManager's partial rendering), it will work just fine on a full postback when you click btnSwitch.
I want it to work on a partial postback, because this whole thing is a small piece compared to the rest of the page, and I don't want to do a full postback every time they switch views. Apparently, the ScriptManager doesn't even bother re-rendering the ascx file for possible changes. Either the ScriptManager is not smart enough, or there is an option I'm missing to let it render the <script> so I can invoke its methods on the client side. A potential answer someone might suggest is "why don't you take out the javascript, put it in its own .js file, and have the page reference it so it's available to the control?"
That won't really work with me, because the script block does some initialization and modification that pertain to that single control instance, not to all others on the page.
In turn, you might also be concerned that if I have more than one instance of the control, I end up with copies of the same script. Not really; there will only be ONE input mode of this control in a page at any given time, it's just that I have those two modes in two separate views and I let the user switch between them.
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.
i have some time consuming serverside function so i try to execute each function step by step and inform the user about the progress.
So my approach was:
create a visible button that performs an asynchronous postback and handle the click event on serverside execute the first function update a Label to inform the user if the function was executed successfully register a javascript that triggers the click-event of a second invisible(Style="display: none") button that is also registered as asynchronous trigger for the UpdatePanel send page back to client and execute script to click the invisible button handle the button-click, inform user, register js for third invisible button, execute button-click and so on...
But the problem is that the UpdateProgress-control will not be shown although i've set the AssociatedUpdatePanelID correctly. The functions are all triggered correctly and the labels are getting updated, only the UpdateProgress keeps invisible.
I am working with a user control which is inside an UpdatePanel. The user control uses swfobject to add a flash object to a div in the user control. Part of the functionality of the user control is it allows the user to change 'channel'. The channel is set and handled in the code behind hence the call in the JavaScript below to <%=channel%>.
The problem I have is that when the new channel is saved, the JavaScript code below is still pointing to the old channel. The only way I can fix this is to refresh the page via the code behind, but I'm thinking there must be a better way to do this..
I am trying to use LinkButtons with the DefaultButton property of the ASP.NET Panel in an UpdatePanel. I have read and used the various other answers that are around describing the wiring up of the click event so that a full postback is not done instead of a partial postback. When the page loads, I wire up the .click function of the LinkButton so that the DefaultButton property of the ASP.NET panel will work.
This all works fine, until you bring an UpdatePanel into the mix. With an UpdatePanel, if there is a partial postback, the script to wire up the .click function is not called in the partial postback, and hitting enter reverts to causing a full submit of the form rather than triggering the LinkButton.
How can I cause javascript to be executed after a partial postback to re-wire up the .click function of the LinkButton? I have produced a sample page which shows the problem. There are two alerts showing 1) When the code to hook up the .click function is being called, and 2) When the .click function has been called (this only happens when you hit enter in the textbox after the event has been wired up). To test this code, type something in the textbox and hit Enter. The text will be copied to the label control, but "Wiring up Event Click" alert will not be shown. Add another letter, hit enter again, and you'll get a full postback without the text being copied to the label control (as the LinkButton wasn't called). Because that was a full postback, the Wiring Up Event Click event will be called again, and the form will work properly the next time again.
I have a JavaScript slider which calls the follow functions:
var prm = Sys.WebForms.PageRequestManager.getInstance(); prm._doPostBack('ZoomButton1','');
The ZoomButton1 is tied to an UpdatePanel and does a partial postback. In this case, when the Slider is constantly be dragged left and right, the value is changing/updating and JavaScript is hammering the postback extremely fast. It is so fast, the server sometimes but not always reports a pagerequest manager error, I believe.
I know that I can set it to just update my data (updatepanel) on a button_release or a mouse-up.. but occasionally, I still encounter the pagerequest manager error.
I have a simple form (textbox, submit button) which is wrapped in an update panel.
[Code]....
I type some text in the textbox, click submit, then the server creates a database record and returns an object, which has properties like ID, Name, URL, Blah, etc. These are the values that the script requires.
So if i were to call a web service from the client-code, in order to get the values that were just created, i would need to do some hacks (get last record modified that has the value of the textbox). Not ideal, and neither is two AJAX calls for one form post. (update panel postback, then web service call).
I am having problems selecting the text within a TextBox in an UpdatePanel in IE 8. Consider a very simple page that contains a single UpdatePanel. Within that UpdatePanel there are two Web controls:
A DropDownList with three statically-defined list items, whose AutoPostBack property is set to True, and A TextBox Web control
The DropDownList has a server-side event handler for its SelectedIndexChanged event, and in that event handler there's two lines of code:
I have recently started learning ASP.NET with MVC 2 Framework, I am facing difficulties in the following scenarios.In my MVC application I want to retain partial information in Model over post backs.Following is my scenario,
1. I initiate "Edit" of main record by clicking date hyperlink from left navigation.
2. Amend some data.
3. Save the record.
4. "Edit" sub record of the saved record by clicking another hyperlink from bottom left navigation panel.
The page is divided in to 6 tabs, the first 5 tabs shows the data for the main record and the 6th tab shows data of sub record. Wehn we "Edit@ sub record the previous 5 tabs doesn't have any changes noted, that means there is no harm in keeping their details intact in the main model. So is there a way to access model in the controller on hyper link click action so that I can only load the data for the clicked sub record (I am asking this, because the hyperlink click uses HTTP GET method so no model parameter passed in action method). If no, then how do I retain partial values in the Model over post backs?
Note that each tab data have been kept in individual models, and a main model has a collection member to hold all these individual models together.I thought as the model is binded with the view, it is too binded with controller. But it is allowing easily to access model in variable "Model" for the view but not for the controller.
I have an IEnumerable< T> which is declared on the page like this:IEnumerable< Person> person;When the page postsback, the person list is null. How can I retain the values of person list without declaring it as static? Sr. devs in my company say that you should not declare the list as static.
When the finish button is clicked on the third step I would like to Create the user and send the form. I have the logic for this written but the only problem I have is the when the next button is pressed on a wizard, a PostBack occurs and my password field:
In the Script documents that asp.net automatically generates how can I surround the whole generated scripts with try/catch statement to avoid 'Microsoft JScript Compilation error'
My issue is: i got a DevExpress control (ASPxGridView) that added and set-up in run time, since i activated the grouping functionality in the grid I still get JS error says ';' expected whenever i use (click) on one of grouping/sorting abilities, I activated script Debugging for IE, in the JS code turns out that there is no missing ';' and once i click ignore for the error msg that VS generates every thing works fine, and surly end-user can't see this msg so i figured out if i try/catch the script that may help avoid this error.
I have seen many posts here regarding this, but none with a successful solution.I m using a asp.net fileupload control & not the html one.I have various controls on the page, & on a listbox control, listitem selection, page postbacks.So before it, if i had selected a file for upload & page poastbacks, the the file goes off.Now on postback, I have got the filename in a hidden field, but since the Fileupload control doesnt have any setter methods, not able to get how to set the hidden field value & how to set it...
We currently have a page with several user controls (8 of them) and when a control that is contained in an updatepanel initiates a postback the focus is not retained. In some cases, it looks like the focus is sent to the top of the page, and in other cases the focus looks like it is sent to the control with the TabIndex=1.
I have tried 3 different solutions and they all end up with the same result.
The first two were from article: [URL]
Solution 1: At the end of the server event executed in postback, add:
[Code]....
The article says both of those solutions worked, but for us, neither of them did.[Code].... ASPX.CS
[Code]....
[Code]....
In all 3 scenarios the control we want to have the focus gets the focus for a split second and then the focus is cleared (set to the top of page, or TabIndex=1).
I am using string builder class to store the dropdown selected values .. I am doing this on the selected index change event .. The problem is the previous value does not retainĀ ..
I am having an aspnet panel in my aspx file.There is an ultraweb tab placed inside this.also I am having a button outside this panel.Within the tab I have a textbox whose readonly property is
set to "true".Whenever I click the button a javascript function is called .On clicking 'OK' in the popup ,the textbox values are lost.Is there a way to retain these values?
I have the example working but I added a Select Command to the Detail grid for the purpose of selecting a detail record which will redirect to another page. The problem is that when the Select command is clicked the expanded detail grid collapses as if I had clicked the minus. The page and codebehind are:
The graphic designer of a project I'm building a web site for chose jquery.tools [URL] for a tabs tool in the site. Unfortunately it seems that the tool doesn't behave properly on a postback in IE7 or IE8 (it does behave properly in FireFox, Chrome and Safari). Does anyone have experience using the jquery.tools with asp.net? and know how to retain the tab index on a postback? I've tried a lot of things and can't get it to work. The code i'm using now is as follows:
$("ul.tabsScenario").tabs("div.panes > div"); var tabIndex = $('#ctl00_ContentPlaceHolder1_EnInDeToekomst1_HiddenFieldTabIndex').val(); $("ul.tabsScenario").tabs('select', tabIndex);
where the tab index is stored in a hidden field (HiddenFieldTabIndex). The above code works fine in Firefox, Chrome and Safari, but not in IE7 or IE8. I am using a ScriptManager and UpdatePanels, but in an extremely simple website example I can't even get the jquery.tools tabs tool to work. There are some unanswered posts on the Jquery.Tools forum concerning this topic, but yeah, that doesn't help much. I've already determined that the jquery.ui tabs tool works well after a postback but that would cost a lot of refactoring in our project as far as html and css goes. I'd like to avoid that.
I have a dropdown populated with data , based on a true / false condition i change the dropdown item color when dropdown gets loaded initially the item color are proper based on condition. but if i select a particular item & then again click on dropdown the item color disappear show to retain the item color.
I'm reading an invoice dataset and building a html table with checkboxes and textboxes in it, and I put that code in a postback = false block, then i got a button and a literal. The button click will loop through the html table checkboxes to calculate a total and assign it to the literal and display it. I got everything working except one thing, every time i click the button, the html table refreshes and lost all the value in textboxes....even though I put the html building block in the postback = false block,it seems like it still won't preserve the values in the textboxes once there's a button click...Anybody knows a solution to that? I want the textboxes keep what values are there.