【发布时间】:2011-03-13 19:49:41
【问题描述】:
在页面加载/任何事件中执行代码后,如何在服务器端调用 javascript 函数?我在此页面中使用 UpdatePanel。我试过Page.RegisterStartUpScript, ClientScript.RegisterStartupScript。这些都不起作用。
【问题讨论】:
标签: c# asp.net javascript updatepanel
在页面加载/任何事件中执行代码后,如何在服务器端调用 javascript 函数?我在此页面中使用 UpdatePanel。我试过Page.RegisterStartUpScript, ClientScript.RegisterStartupScript。这些都不起作用。
【问题讨论】:
标签: c# asp.net javascript updatepanel
对于 UpdatePanel,您需要使用 ScriptManager.RegisterStartupScript,如下所示:
var script = "alert('hi);";
ScriptManager.RegisterStartupScript(this, GetType(), "MyScript", script, true);
您必须记住,在 UpdatePanel 中,您不会将整个页面发送回客户端,因此 Page 版本将不起作用,因为它们的内容在部分更新时永远不会出现在任何地方。使用ScriptManager,它主动将其推送到作为脚本发送的 AJAX 响应中以执行,因此它的行为略有不同。
【讨论】:
myFunction("something"),等等......任何你想要的,把它想象成客户端的<script type="text/javascript">myFunction("something");</script>......这不是你想要的?
DisplayM,这应该可以工作。检查您的控制台是否有错误,看看有什么错误,如果alert() 工作正常,这就是需要在此处修复的区域。
ScriptManager.RegisterStartupScript
注册一个启动脚本块 UpdatePanel 中的控件 通过使用 ScriptManager 控件, 并将脚本块添加到页面。
【讨论】:
就在昨天,我做了一些研究来帮助一位同事,并提出了以下解决方案。它依赖于 ajax 控件扩展器中使用的一些技术来注册数据项。由于我希望这是一种更通用的方法,因此我将以下代码放置在母版页中的脚本块中,就在 scriptmanager 对象之后:
Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(PageLoadingHandler); 功能PageLoadingHandler(发件人,参数){ var dataItems = args.get_dataItems(); if ($get('') !== null) { eval(dataItems['']); } }
然后我在母版页的标记中放置了一个隐藏字段,如下所示:
asp:HiddenField ID="JSBridge" runat="server"
这就是母版页。现在,我所有的网页都继承自一个基本页面,所以我在基本页面中放置了一个方法,如下所示:
public void InvokeScriptMethod(string methodName, string[] methodArgs) { 字符串 sArgs = string.Empty; 字符串分隔符 = 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(object sender, EventArgs e) { //-- 调用基页方法调用javascript调用 InvokeScriptMethod("ShowMessage", new string[] { "David", "Whitten", "44" }); }
这是假设您在某处有一个名为“ShowMessage”的 javascript 方法,其中包含必要的参数。显然,可以指定任何方法名称和任意数量的参数。
只是想分享我的发现。也许还有更好的方法,但我觉得这非常简单和灵活。
大卫
【讨论】: