views:

31

answers:

2

Hi I have an asp.net usercontrol located on on my aspx page. In the usercontrol there is a javascript function that I would like to fire everytime the page that contains the usercontrol submits to the server. (directly before this happens) Ideally I prefer to not have to write any code in the parent to make this happen, but I am not sure what the usercontrol may be capable of at this time. Can the usercontrol know that the page is submitting to the server and fire the function before this happens? Is there some sort of event that takes place here?

Is this possible? And is my description clear?

Thanks!

A: 

Postback is a server-side event. On the client-side the page is just getting loaded again... So if you really want to write client-side script (be it in the page or a user control) for the postbacks, I would suggest you send down a hidden input or something as an indicator of whether or not it is a postback. Like:

Markup:

<asp:HiddenField ID="postBackFlag" runat="server" Value="false" />

Server side:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    If IsPostBack Then
        Me.postBackFlag.Value = "true"
    End If
End Sub

Client side:

    $(document).ready(function() {
        if ($('input[id$=_postBackFlag]').val() === 'true') {
            //do stuff
        }
    });    
Floyd Pink
Ahh thank you very much...I see that my question was not correct...I would like to call the function when the user controls parent submits to the server. I will edit my question. Thanks! :)
Ashley
A: 

you can add a client side event handler for the form's submit event. you can generate your javascript when Page_Load is called in the user control and use Page.ClientScript.RegisterStartupScript to add it to the page.

string key = "submitscript";

System.Text.StringBuilder script = new System.Text.StringBuilder();
script.Append("function mySubmitHandler(e) { \n");
script.Append("    // TODO my javascript here \n");
script.Append("    alert('derp'); \n");
script.Append("} \n");
script.AppendFormat("var f = document.getElementById('{0}'); \n", Page.Form.ClientID);
script.Append("if(f.addEventListener){\n");
script.Append("    f.addEventListener('submit', mySubmitHandler, false); \n");
script.Append("} else { \n");
script.Append("    f.attachEvent('onsubmit', mySubmitHandler); \n");
script.Append("} \n");

Page.ClientScript.RegisterStartupScript(this.GetType(), key, script.ToString(), true);

the script will only be added once for each combination of the type and key parameters, so you can have multiple user controls on the page and this script will only be added once.

lincolnk
Thanks! I appreciate it!
Ashley