从ASP.NET AJAX修改

时间:2009-12-10 10:42:42

标签: c# asp.net-ajax

我最近升级到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,则无效。

如果您对此问题感到困惑,请发表评论。

2 个答案:

答案 0 :(得分:1)

我认为您使用的是UpdatePanel。第二次回发在部分渲染模式下执行。在此类回发期间,您无法更改头控制。但您可以尝试使用ScriptManager注册启动脚本:ScriptManager.RegisterStartupScript。并通过javascript更改head标记。

答案 1 :(得分:1)

感谢Unholy,使用jQuery和selector解决了这个问题。

刚用过这个:

$("head > link[href$='a.css']").remove();