【问题标题】:ASP.NET, ScriptManager, History Points and Dynamic JavascriptASP.NET、ScriptManager、历史点和动态 Javascript
【发布时间】:2012-02-16 21:19:25
【问题描述】:

我有一个 ASP.NET 用户控件,我想编写一些动态 Javascript(基本上是一个用于打开手风琴节点的 JQuery 调用)。

为了使事情复杂化,我使用了历史记录点。简而言之,我需要根据存储在 URL 中的历史点数据中的值打开一个 JQueryUI 手风琴。

我已经完成了设置历史记录点工作的部分,我可以在浏览历史记录时单步执行我的代码(如下)。问题是,在这个例子中,我的脚本永远不会在页面上呈现。

protected void uxScriptManager_OnNavigate(Object sender, HistoryEventArgs e)
    { 
        if(!String.IsNullOrEmpty(e.State["activeTab"]))
        {
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "xScript", "alert('Hello,world!');", true);
        }
    }

我做错了吗?

附录

我一直在修修补补,看起来我注册客户端脚本块的调用在其他事件中工作正常......但在脚本管理器的导航事件中,我无法将新脚本写入页面。我在想我想做的事情是不可能的......

【问题讨论】:

标签: c# jquery asp.net jquery-ui


【解决方案1】:

根据我的发现,似乎不可能在 Navigate 事件中将新的客户端脚本写入页面 - 或更改现有脚本块中的值。我注意到这一点,以防其他人尝试做同样的事情。

更正

我发现它可以做我想做的事!

  • 我需要在页面生命周期的早期设置历史记录点
  • 我需要在页面的RegisterStartupScript方法中设置动态脚本

(Ivan 的帖子为我指明了正确的方向,所以我将他的帖子标记为答案)

【讨论】:

    【解决方案2】:

    看来您需要通过调用ScriptManager.RegisterStartupScript 方法添加脚本以在页面上显示元素:

    ScriptManager.RegisterStartupScript(this, this.GetType(), this.ID, ""alert('Hello,world!');", true);

    【讨论】:

    • 嗨伊万。我试过了 - 但似乎正在发生的事情是在 Navigate 事件中,我无法向页面添加新的脚本块。我认为这是因为该页面正在从历史中读取,而不是完全重新渲染。服务器端调用工作正常,但在这种特殊情况下,我需要挂钩客户端脚本,而且看起来不太可能。 (如果我将脚本的相同代码块移动到另一个事件,它工作正常)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多