UpdatePanel中的JavaScript代码

好的:我在包含单个占位符的aspx页面上有一个UpdatePanel。

在这个占位符中,我根据某些外部条件(这是一个配置页面)附加了一个用户控件中的一个。

在每个用户控件中都有一个bindUcEvents()javascript函数,它将各种jQuery和javascript事件绑定到usercontrol中的按钮和validation器。

我遇到的问题是usercontrol的javascript未被识别。 通常,当updatepanel回发时,会在updatepanel内部执行javascript,但页面中找不到这些代码(我已经尝试通过firebug的控制台手动运行该函数,但它告诉我它无法找到该函数)。

有没有人有什么建议?

干杯,艾德。

编辑:

削减(但function)的例子:

标记:

 

C#:

 protected void PopulatePlaceholder(object sender, EventArgs e) { Button button = new Button(); button.ID = "Push"; button.Text = "push"; button.OnClientClick = "javascript:return false;"; Code.Text = " function bindEvents() { $('#" + button.ClientID + "').click(function() { alert('hello'); }); } bindEvents(); "; PlaceMe.Controls.Add(button); } 

即使代码存在于页面上,您也会看到按钮没有弹出警告消息。

EDIT2:

好吧,只是为了说清楚,生产代码比绑定到文字的单个函数复杂得多,并且包含大量的

  

一些代码很难分解成非特定的函数,并且毫无意义,因为它们每个都只在一个地方使用(我们说的是非常具体的validation和奇怪的弹出触发器+一些逻辑)。

摆脱Literal控件并使用ScriptManager注册脚本。 你正在做的事情因同样的原因不起作用

 window.document.getElementById('someId').innerHtml = ""; 

不起作用。 试试这个:

 protected void PopulatePlaceholder(object sender, EventArgs e) { Button button = new Button(); button.ID = "Push"; button.Text = "push"; button.OnClientClick = "return false;"; string script = "function bindEvents() { $('#" + button.ClientID + "').click(function() { alert('hello'); }); } bindEvents();"; ScriptManager.RegisterClientScriptBlock(this.Page, typeof(SomeClass), Guid.NewGuid().ToString(), script, true); PlaceMe.Controls.Add(button); } 

RegisterClientScriptBlock的参数可能需要改变,但你明白了。

在更新面板触发后重新运行一些js我总是使用它

 Sys.WebForms.PageRequestManager.getInstance().add_endRequest( function(sender, args) { //update whatever here }); 

此外,如果您对更新面板中的元素有任何引用,您也可以刷新该函数中的那些变量,否则您将拥有不起作用的旧引用。

将scriptmanager(Ajax Extensions)添加到您的页面,并在该管理器中添加您的脚本引用。 管理器将在基于ajax的页面加载(而不仅仅是初始加载)上加载每个脚本标记 – 在updatepanel中移动所有需要的javascript代码,你已经完成了很多工作。

     

没有读好这个问题(没有样本)。 看到我的新回复。

也许你正在寻找这个: http : //api.jquery.com/live/

几乎与.bind()兼容(上面的链接中列出的例外) – 但也绑定到稍后添加/更改的元素。

或者也可以尝试使用.delegate() – 不能直接替换.bind()调用,但在大多数情况下要快得多。

不知怎的,似乎你的Code.Text在某处翻译丢失了 – 不知道细节,也许是设计上的; 无论如何,下一步确实有效:

  protected void PopulatePlaceholder(object sender, EventArgs e) { Button button = new Button(); button.ID = "Push"; button.Text = "push"; button.OnClientClick = "javascript:return false;"; // Code.Text = PlaceMe.Controls.Add(button); PlaceMe.Controls.Add(new LiteralControl("")); } 

由于您已经从代码隐藏中构建了javascript代码,因此您也可以动态添加控件。