替代ASP.NET中的Page_Load(以及一个好的WTF故事)

Jas*_*Cav 5 .net html javascript asp.net

哇,我有一个问题(甚至可能是每日WTF的一个),我希望有一个解决方案.(我为长篇文章道歉...)

我一直在研究一个月前我继承过的网站.我一直在研究的一个部分是修复其中一个控件(本质上是一个动态标题栏),以便它显示我的用户请求的其他信息.作为这个项目的一部分,我创建了一个Site.master文件,这样我就不必将标题栏重新编码到每个页面中.当我第一次开始这样做时,它看起来效果很好.我开发的所有页面看起来都很棒,并且条形图已更新,因为它应该显示所需的信息.

好吧,当我将Site.master(以及此控件)放入较旧的网站页面(我没有专门开发的网站页面)时,我注意到它们中的一些看起来很糟糕,但不是全部.当我说它看起来很糟糕时,基本上,控件会将自身对齐到页面而不是应该居中.我花了几个小时调试无济于事 - CSS看起来没错,HTML似乎没问题,我在Javascript中没有看到任何东西(虽然,我确实错过了一些东西,我会在一秒钟内指出),甚至旧代码看起来是正确的(尽可能最好 - 它编写得不是很好).另一位同事看了看这个网站,一开始也找不到任何东西.

直到我只想到查看页面的渲染源代码(我在IE8中的开发人员视图中工作到目前为止),才明白出现了什么问题.

原始开发人员在许多页面上执行搜索.为此,他向数据库查询所有数据,然后将它们加载到页面内的Javascript数组中,以便他可以访问它们.这本身就是一个很大的问题,因为我们谈论的是成千上万的项目,而且它显然不具备可扩展性(而且,是的,网站很慢).然而,它最终点击了搞砸了Site.master的东西 - 当他将数据加载到Javascript数组中时,他使用大量的Response.Write(字符串)调用在Page_Load上将数据写入HTML.WTF(以及令我搞砸的是)他在DOCTYPE之前插入Javascript导致IE进入怪癖模式!

所以,因为我需要至少得到这个版本(我稍后会修复真正的问题),我想知道:有没有办法可以强制将这个Javascript插入到HTML中的其他地方 - 在DOCTYPE之后最小?现在,所有Response.Write()调用都在Page_Load方法中完成.我只是需要稍后插入它们.

Mit*_*ers 5

有很多方法可以做到这一点,更有可能"正确"的方法是构建字符串,然后使用Page.ClientScript.RegisterClientScriptBlock方法来注册JS,这将把它放在右边地点

另一种选择,更多的是快速和脏的方式是向页面添加一个控件,而不是response.write,构建JS,然后设置文字控件的文本属性.