在用户控件中从codebehind C#调用JavaScript函数

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

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

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

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

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

这解决了这个问题:

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

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

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

在我看来,你所拥有的与类型不相容。 当你在实际的页面中包含这部分代码:( (this, typeof(Page),...因为你正在处理一个页面而起作用。一旦你把它放在UserControl中,你就不再处理一个页。

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

 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); 

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