我正在运行一个运行.NET 4.0的Web应用程序项目。我有很多.aspx页面,现在我想在所有.aspx页面标题中添加一段脚本代码,例如Google Analytics。
我知道有一个解决方案是添加到每个页面,但我想知道是否还有其他方法可以修改每个.aspx页面?
*我的标题不是runat服务器
我有一个想法,但不确定它的工作与否。
我无法在Global.asax中获得Page.Response,因为我在Application_PostRequestHandlerExecute&还有Application_EndRequest。有谁知道这项工作及其运作方式?
感谢。
答案 0 :(得分:5)
使用master pages。这是在不重复自己的情况下将相同内容放在多个页面上的ASP.NET方式。
答案 1 :(得分:0)
我们所有的aspx页面代码隐藏类都继承自同一个基类,这允许我们使用单一控制点将标准客户端元素(控件,脚本等)注入到每个页面中。
我们的设计是在母版页出现之前实现的,但是虽然它可以转换为母版页设计,但我们发现这种实现非常灵活,能够响应不断变化的需求。
例如,我们有两个完全独立的应用程序设计(不同的皮肤,一些不同的行为),它们基于相同的代码库和页面集。我们能够通过对基类的简单修改来动态交换横幅和其他UI和脚本元素,以便支持这一点而无需复制每个页面。
不幸的是,如果您希望脚本位于head元素中,则需要确保它们都标记为runat = server。
我们的基类本身继承自Page,因此它可以截取所有页面的事件并对其进行操作,而不是继承类或者除了继承类之外(我们实际上有内部可重写的方法,继承者应该使用而不是页面事件为了确保执行顺序。)
这是我们的(VB)代码,用于向标题添加脚本(在Page的LoadComplete方法中):
' sbscript is a stringbuilder that contains all of the javascript we want to place in the header
Me.Page.Header.Controls.Add(New LiteralControl(sbScript.ToString))
如果无法将头更改为runat服务器,则可以查看将脚本放在页面顶部的ClientScriptManager方法RegisterClientScriptBlock。
答案 2 :(得分:0)
您可以使用带有自定义代码(如Google Analytics)的标题创建基本页面,并让其他页面继承该页面。它将促进两件事: 1)如果您想要更改自定义代码,您只需在一个地方进行 2)没有重复的代码因此更易于维护
答案 3 :(得分:0)
我正试图在我们试图退役的遗留应用上做同样的事情。我需要在所有旧页面上显示弹出窗口以唠叨用户更新其书签以使用新网站,而不必强迫他们停止使用旧网站(尚未)。当我可以在一个弹出式脚本中进行操作时,将网站转换为在母版页上运行是不值得的,因为整个事情很快就会退役。主要的新网站使用母版页,这显然简化了那里的事情。
我在一个文件中有这一行,里面有一些不同的常量。
Public Shared ReadOnly RetirementNagScript As String = "<Script Language='javascript'> alert('[app name] is being retired and will be shut down [in the near future]. Please update your bookmarks and references to the following URL: [some URL]'); </script>"
然后我将它插入Global.asax,在Application_PostAcquireRequestState:
中Response.Write(Globals.RetirementNagScript)
希望这对你有用;我仍然需要能够在遗留站点的每个页面上以这种方式向用户显示可点击的URL,并且JS警报不会为我这样做。