Буквально вчера я провел какое-то исследование, чтобы помочь коллеге, и придумал следующее решение.Он основан на некоторых методах, используемых в расширителях управления 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 с необходимыми параметрами.Очевидно, что можно указать любое имя метода и любое количество параметров.
Просто хотел поделиться своими выводами.Может быть, есть даже лучший способ, но я нахожу это довольно простым и гибким.
Дэвид