在ASP.net页面加载时以编程方式运行javascript的最佳方法是什么?

时间:2010-06-03 17:57:00

标签: asp.net javascript

在我的ASP.net项目的global.asax文件中,我正在检查某些条件。当满足这些条件时,我想在页面运行时自动执行javascript代码。

这是我的代码:

  

如果条件那么
      Response.Write(“< script type =”“text / javascript”“>”)
      Response.Write(“// Javascript代码做东西”)
      Response.Write(“< / script>”)
  结束如果

虽然这似乎有助于执行Javascript代码,但我认为这不是最佳做法,因为此代码将在所有加载页面的HTML之前。

在我的页面加载时,以编程方式处理一些额外的Javascript代码的最佳方法是什么?

更新感谢您的回答。太糟糕了,这个解决方案无法在global.asax内起作用。有没有办法在整个网站范围内实现这一目标?似乎global.asax是放置与每个页面一起运行的代码的合理位置...... Response.Writeglobal.asax中正常工作。

3 个答案:

答案 0 :(得分:7)

要从服务器控件或页面正确管理脚本的放置,您应该使用ClientScriptManager.RegisterStartupScript()

如果您在网站中使用ajax控件,也可以在ScriptManager中使用等效方法:ScriptManager.RegisterStartupScript

这些方法负责在文档加载完成后在适当的位置输出脚本。发布的链接有一些很好的例子可供使用。

请注意,您将无法直接从global.asax使用这些方法,因为它没有引用当前页面。 Global.asax用于将事件挂钩到HttpApplication管道,并且与实际的HttpHandler(例如Page对象)分离。为了保持UI的分离,你最好在你的母版页或一些基页类中进行检查,然后从那里输出脚本。

答案 1 :(得分:1)

回到asp.net ajax 1.0的时代,我们在ajax客户端库中有一个名为Sys.WebForms.PageRequestManager的东西。没有使用过asp.net 3.5和asp.net ajax,但我确信它足以将asp.net ajax javascript文件添加到你的页面中,你就可以使用它了。查看名为pageLoaded活动的活动。

ps:每次有同步或异步回发时,都会触发此事件

答案 2 :(得分:1)

如果您想在每个页面上进行此操作,请将其放在您的母版页上(如果有的话)。

如果没有,您可以创建一个基本的Page类,它继承自System.Web.UI.Page并扩展它以检查您的条件&渲染javascript。

然后在每个页面的代码隐藏中,继承您的基本页面类而不是System.Web.UI.Page

public partial class Orders : MyCode.BasePage