在服务器端调用javascript函数

时间:2010-07-09 11:11:38

标签: c# asp.net javascript updatepanel

如何在页面加载/任何事件中执行代码后调用服务器端的javascript函数?我在这个页面中使用UpdatePanel。我曾尝试Page.RegisterStartUpScript, ClientScript.RegisterStartupScript。这些都不起作用。

3 个答案:

答案 0 :(得分:6)

使用UpdatePanel,您需要使用ScriptManager.RegisterStartupScript,如下所示:

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

您必须记住,在UpdatePanel中,您不会将整个页面发送回客户端,因此Page版本将无效,因为它们的内容永远不会在部分更新中发生。使用ScriptManager它会将其作为脚本执行的AJAX响应主动推送,因此它的行为略有不同。

答案 1 :(得分:1)

就在昨天,我做了一些研究来帮助同事,并提出了以下解决方案。它依赖于ajax控件扩展器中使用的一些技术来使用注册数据项。由于我希望这更像是一种通用方法,因此我将以下代码放在masterman页面的脚本块中,紧跟在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%GT;']);    } }

然后在母版页的标记处,我放置了一个隐藏字段,如下所示:

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(object sender,EventArgs e)         {             // - 调用基页面方法来调用javascript调用             InvokeScriptMethod(“ShowMessage”,new string [] {“David”,“Whitten”,“44”});         }

这假设你有一个带有必要参数的名为“ShowMessage”的javascript方法。显然,可以指定任何方法名称和任意数量的参数。

只是想分享我的发现。也许甚至有更好的方法,但我发现这非常简单和灵活。

大卫

答案 2 :(得分:0)

ScriptManager.RegisterStartupScript

  

为a注册启动脚本块   UpdatePanel中的控件   通过使用ScriptManager控件,   并将脚本块添加到页面。