【问题标题】:Calling JavaScript function from codebehind C# in a user control在用户控件中从代码隐藏 C# 调用 JavaScript 函数
【发布时间】:2011-09-08 15:01:29
【问题描述】:

目前,我正在使用以下方法调用我的 JavaScript 函数:

ScriptManager.RegisterClientScriptBlock(this, typeof(Page), Guid.NewGuid().ToString(), "$(function(){$.jGrowl('Hello World');});", true);

完美运行!即使使用母版页和更新面板,它也能按预期工作。

但是,当我尝试在嵌入到使用 jQuery 厚框调用的页面中的用户控件中执行相同操作时,它不起作用!

有人知道如何解决这个问题吗?

【问题讨论】:

  • 这个调用发生在你代码的什么地方? Page_Load()?
  • 点击服务器按钮时

标签: c# javascript jquery user-controls thickbox


【解决方案1】:

这解决了问题:

ScriptManager.RegisterClientScriptBlock(this.Page, typeof(UpdatePanel), Guid.NewGuid().ToString(), "$(function(){$.jGrowl('Hello World');});", true);

正如@Joel 所提到的,我用作函数参数的类型存在问题。

注意:如果您使用的是厚框,则可能您没有使用包含用户控件的页面中的母版页。因此,还需要在该页面中引用 jQuery,因为母版页不参与厚框。

【讨论】:

    【解决方案2】:

    在我看来,您所拥有的与类型不兼容。当您在实际页面中包含此代码时,这部分代码:(this, typeof(Page),... 有效,因为您正在处理一个页面。将其放入 UserControl 后,您就不再需要处理 Page。

    您可以尝试将公共属性添加到您的用户控件:

    public System.Web.Page ParentForm { get; set; }
    

    在包含控件的页面中,在 Page_InitCompletePage_Load 事件中包含此代码:

    myUserControl.ParentForm = this;
    

    然后你可以修改你的 scriptmanager 语句为:

    ScriptManager.RegisterClientScriptBlock(ParentForm, typeof(Page), Guid.NewGuid().ToString(), "$(function(){$.jGrowl('Hello World');});", true);
    

    【讨论】:

      【解决方案3】:

      您是否确保您的用户控件正在调用 databind()?我以前遇到过类似的问题。

      【讨论】:

        猜你喜欢
        • 2012-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-13
        • 1970-01-01
        • 1970-01-01
        • 2015-05-03
        相关资源
        最近更新 更多