2010-06-03 46 views
3

在我的ASPNET项目的global.asax文件中,我正在检查某些条件。当这些条件满足时,我想在页面运行时自动执行JavaScript代码。在ASP.net页面加载时,以编程方式运行JavaScript的最佳方式是什么?

这是我的代码:

如果条件然后
回复于(” <脚本类型= “” 文本/ JavaScript的 “”> “)
回复于(” // Javascript代码做的东西 “)
的Response.Write(” </SCRIPT>“)
结束如果

虽然这似乎工作执行Javascript代码,我不认为这是一个最佳实践,因为这个代码会先于加载的页面的HTML的所有

当我的页面加载时,通过编程实现一些额外的Javascript代码来运行的最佳方式是什么?

更新感谢您的回答。太糟糕了,这个解决方案在global.asax之内不起作用。有没有办法让这种情况发生在整个网站?看起来global.asax将是放置与每个页面一起运行的代码的合乎逻辑的地方... Response.Writeglobal.asax中正常工作。

+0

我看到,所以我做了一些奇怪的事情,我的代码。我添加了一些空格以使其正确显示。 – 2010-06-03 18:21:10

回答

7

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

您还可以,如果你使用的是在您的网站AJAX控件使用等效的方法中的ScriptManager:ScriptManager.RegisterStartupScript

这些方法负责在文档完成加载时将您的脚本输出到适当的位置以运行。发布的链接有一些很好的例子。

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

+2

-1没有足够的jQuery ... – 2010-06-03 18:01:28

+1

@Justin - 非常不公平-1因为这个问题没有提到jQuery被使用甚至在项目中被允许。我的.02 – hunter 2010-06-03 18:13:06

+0

这实际上是一个很好的观点。如果你可以在客户端运行你的“条件”逻辑,jQuery可以很容易地在DOM加载完成时运行脚本。我的答案遵循OP示例,并假定必须在服务器上检查条件,如果条件不满足,则不输出任何内容。 – womp 2010-06-03 18:13:18

1

回到asp.net ajax 1.0的日子里,我们在ajax客户端库中有一些名为Sys.WebForms.PageRequestManager的东西。没有与asp.net 3.5和asp.net ajax一起工作,但我相信它足以将asp.net ajax javascript文件添加到您的页面中,并且您将能够使用它。检查一个名为pageLoaded事件的事件。

PS:这个事件将触发每次有同步或异步回发

1

如果你想这样做的每个页面上,把它放在你的母版,如果你有一个时间。

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

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

public partial class Orders : MyCode.BasePage 
相关问题