在用户控件中从C#后面的代码调用JavaScript函数

时间:2011-09-08 15:01:30

标签: c# javascript jquery user-controls thickbox

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

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

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

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

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

3 个答案:

答案 0 :(得分:4)

这解决了这个问题:

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

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

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

答案 1 :(得分: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);

答案 2 :(得分:0)

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