Как вызвать UserControl javascript, когда родительская страница отправляется на сервер? - PullRequest
0 голосов
/ 08 сентября 2010

net usercontrol находится на моей странице aspx. В usercontrol есть функция javascript, которую я хотел бы запускать каждый раз, когда страница, содержащая usercontrol, отправляется на сервер. (непосредственно перед этим) В идеале я предпочитаю не писать какой-либо код в родительском объекте, чтобы это произошло, но я не уверен, что пользовательский контроль может быть способен в это время. Может ли usercontrol знать, что страница отправляется на сервер, и запустить функцию до того, как это произойдет? Есть ли какое-то событие, которое происходит здесь?

Возможно ли это? И мое описание понятно?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 08 сентября 2010

вы можете добавить обработчик событий на стороне клиента для события submit формы. вы можете сгенерировать свой javascript при вызове Page_Load в пользовательском элементе управления и использовать Page.ClientScript.RegisterStartupScript, чтобы добавить его на страницу.

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);

скрипт будет добавлен только один раз для каждой комбинации параметров type и key, поэтому вы можете иметь несколько пользовательских элементов управления на странице, и этот скрипт будет добавлен только один раз.

0 голосов
/ 08 сентября 2010

Обратная передача - это событие на стороне сервера. На стороне клиента страница снова загружается ... Так что если вы действительно хотите написать сценарий на стороне клиента (будь то на странице или в пользовательском элементе управления) для обратных передач, я бы посоветовал вам отправить скрытый ввод или что-то в качестве индикатора того, является ли это постбэком. Как:

Markup:

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

Серверная сторона:

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

Клиентская сторона:

    $(document).ready(function() {
        if ($('input[id$=_postBackFlag]').val() === 'true') {
            //do stuff
        }
    });    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...