我最近升级到ASP.NET AJAX应用程序。我在ASP.NET主题中有两个css文件。我使用每个回发中的任何一个css取决于条件。
以前使用我的非AJAX ASP.NET应用程序,我以前做的是
protected void Page_PreRender(object sender,
EventArgs eventArgs)
{
ControlCollection headCollection = Header.Controls;
for (int i = 0; i < headCollection.Count; i++)
{
Control temp = headCollection[i];
if (temp is HtmlLink)
{
if (/* condition to loads a.css */)
{
if (((HtmlLink) temp).Href.EndsWith("a.css", true, null))
{
headCollection.RemoveAt(i);
break;
}
}
else
{
if (((HtmlLink) temp).Href.EndsWith("b.css", true, null))
{
headCollection.RemoveAt(i);
break;
}
}
}
}
}
但是当我迁移到ASP.NET AJAX时,这段代码不起作用。我检查过并发现只有第一个请求中加载的css仍然存在。即,如果在第一个请求上加载了a.css,然后需要在特定的回发上加载b.css,则无效。
如果您对此问题感到困惑,请发表评论。
答案 0 :(得分:1)
我认为您使用的是UpdatePanel。第二次回发在部分渲染模式下执行。在此类回发期间,您无法更改头控制。但您可以尝试使用ScriptManager注册启动脚本:ScriptManager.RegisterStartupScript。并通过javascript更改head标记。
答案 1 :(得分:1)
感谢Unholy,使用jQuery和selector解决了这个问题。
刚用过这个:
$("head > link[href$='a.css']").remove();