Ok, if I capture an event on the client, for example, a click event on a textbox that is inside an update panel, and in that event I call __doPostBack I get a full postback.
However, if I add a button and call it's click event, I get the partial page update I want. So I guess the question is how to invoke a partial page update via script?
Thanks ... Ed
Make sure the appropriate trigger has been set up for the UpdatePanel. You can also set the TextBox to have AutoPostBack="true" which will add a __doPostBack to the onchange event handler.
Of course if you absolutely need to trigger a button click from JavaScript you can do something similar to this:
<
htmlxmlns="http://www.w3.org/1999/xhtml"><headrunat="server">
<title>Untitled Page</title>
<scriptlanguage=javascript>
function SemiHacky(){
__doPostBack('Button1','');
}
</script>
</head>
<body>
<formid="form1"runat="server">
<asp:ScriptManagerID="ScriptManager1"runat="server">
</asp:ScriptManager>
<asp:UpdatePanelID="UpdatePanel1"runat="server">
<Triggers><asp:AsyncPostBackTriggerControlID=Button1EventName="Click"/></Triggers>
<ContentTemplate>
<asp:LabelID="Label1"runat="server"Text="Label"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
<asp:ButtonID="Button1"runat="server"Text="Button"/>
<br/><br/>
<ahref="javascript:SemiHacky();">Click here</a> to execute some JavaScript and submit the Button1 button via JavaScript.
</form>
</body>
</html>
The code behind is just setting the Label text to the current time so you can see the PostBack occur:
Label1.Text =DateTime.Now.ToString();
Cheers,
Al
Hi,
I did exactly as you suggested, but to no avail.
I am trying to launch a modal dialog and I have tried the following variations, some of which seem to work correctly, except that once the modal dialog is display and I try to dismiss it via a server
side mydlg.close() I get an error stating "The control 'dlgDivTasks' already has a data item registered."
These are the individual calls that I have tried. I should point out that if I just to a plain __doPostBack("","") I get a full postback and no error when I try to dismiss the dialog.
_doPostBack('Button1','');
__doPostBack("","");
Sys.WebForms.PageRequestManager.getInstance()._doPostBack("","");
document.forms[0].ctl00_ContentPlaceHolderContent_Button1.click();
$find("DlgTasksBehavior").show();
Thanks ... Ed
Hi Ed,
Have you had any luck using the OnOkScript property of the ModalPupupExtender? One way that I use the modal popup is I have an Ok and Cancel button but they may be named differently based on user actions (ie. Cancel may be labelled as Close). I then use the OnOkScript to execute some client JavaScript which then uses a web service to pass the data back to the server for some processing.
OkControlID="btnOk"OnOkScript="modalOkScript()"CancelControlID="btnCancel"
function
modalOkScript(){//TODO: Add some web service call to take care of my data processing requirements
}
When the Web Service completes, the onSuccess JavaScript function for the webservice in my OnOkScript function changes the 'Cancel' button text to 'Close.
function
onSuccessModalOkScript(result){$get('btnOk').disabled =true;
$get('btnCancel').value ='Close';
}
Then it's finished and the Modal closes via client side when the user is ready.
Al
Looks like my copy / paste made the JavaScript functions look odd.
Hi, thanks for the reply.
Wouldn't what you suggest be kinda limiting? I wouldn't have access to the various data and controls on the page unless I passed a mountain of parameters the the service call. Seems to me I should just be able to do an async update via the update panel so I can use my server side code to get the job done.
The thing that is a mystery to me is why it is doing a full post back in the first place.I have everything working perfectly it's just the damned blink!
Thanks ... Ed
I have just had a similar situation myself whereby a full postback was occuring whenever I called __doPostBack. Trick is that you have to specifiy the actual client ID in the EventTarget parameter
i.e. _doPostBack('', ''); will NOT work where as _doPostBack('ctl00_textBox1', ''); WILL work. Obviously thats just an example so replace ctl00_textBox1 with your actual clientID value
So my code became:
textJobRef.Attributes.Add("onkeyup","javascript:setTimeout('__doPostBack(\'" + textJobRef.ClientID +"\', \'\')', 0)")
I dont think the timeout is required, but .NET does it so it must be for a reason! :)
No comments:
Post a Comment