Вызов функции JavaScript на стороне сервера - PullRequest
4 голосов
/ 09 июля 2010

Как вызвать функцию javascript на стороне сервера после выполнения кода при загрузке страницы / каких-либо событиях?Я использую UpdatePanel на этой странице.Я пытался Page.RegisterStartUpScript, ClientScript.RegisterStartupScript.Ничего из этого не работает.

Ответы [ 3 ]

6 голосов
/ 09 июля 2010

С UpdatePanel вам нужно использовать ScriptManager.RegisterStartupScript, например:

var script = "alert('hi);";
ScriptManager.RegisterStartupScript(this, GetType(), "MyScript", script, true);

Вы должны помнить, что в UpdatePanel вы не отправляете всю страницу обратно клиенту, поэтому версии Page не будут работать, потому что их содержимое никогда не отправляется в частичное обновление. С ScriptManager он активно добавляет это в ответ AJAX, который отправляет в качестве сценария для выполнения, поэтому он ведет себя немного по-другому.

1 голос
/ 30 июля 2010

Буквально вчера я провел какое-то исследование, чтобы помочь коллеге, и придумал следующее решение.Он основан на некоторых методах, используемых в расширителях управления ajax при использовании регистрации элементов данных.Поскольку я хотел, чтобы это был более общий подход, я поместил следующий код в блок сценария на главной странице сразу после объекта scriptmanager:

Sys.WebForms.PageRequestManager.getInstance (). Add_pageLoading (PageLoadingHandler));function PageLoadingHandler (sender, args) {var dataItems = args.get_dataItems ();if ($ get ('<% = JSBridge.ClientID%>')! == null) {eval (dataItems ['<% = JSBridge.ClientID%>']));}}

Затем где-то в разметке главной страницы я поместил скрытое поле, как в:

asp: HiddenField ID = "JSBridge" runat = "server"

Этоэто для главной страницы.Теперь все мои веб-страницы наследуются от базовой страницы, поэтому я поместил метод на базовой странице следующим образом:

public void InvokeScriptMethod (string methodName, string [] methodArgs) {string sArgs = string.Empty;string delim = string.Empty;bool isNumeric = false;int iArg = 0;

        if (methodArgs != null && methodArgs.Length > 0)
        {
            foreach (string arg in methodArgs)
            {
                isNumeric = int.TryParse(arg, out iArg);
                sArgs += delim + ((isNumeric) ? arg : "'" + arg + "'");
                delim = ",";
            }
        }

        ScriptManager manager = (ScriptManager)Master.FindControl("ScriptManager1");

        if (manager.IsInAsyncPostBack)
        {
            manager.RegisterDataItem(Master.FindControl("JSBridge"), methodName + "(" + sArgs + ")");
        }
    }

Итак, предполагая, что ваш контент находится внутри панели обновлений, любых нажатий кнопок или любого события по этому вопросу, на любой веб-странице вы можете просто сделать следующее:

protected void MyButton_Click (отправитель объекта, EventArgs e) {// - вызов метода базовой страницы для вызова вызова javascript InvokeScriptMethod ("ShowMessage", новая строка [] {"David", "Whitten", "44"});}

Предполагается, что у вас есть метод javascript где-то с именем ShowMessage с необходимыми параметрами.Очевидно, что можно указать любое имя метода и любое количество параметров.

Просто хотел поделиться своими выводами.Может быть, есть даже лучший способ, но я нахожу это довольно простым и гибким.

Дэвид

0 голосов
/ 09 июля 2010

ScriptManager.RegisterStartupScript

Регистрирует блок сценария запуска для элемента управления, который находится внутри UpdatePanel, с помощью элемента управления ScriptManager и добавляет блок сценария на страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...