UpdatePanel中的用户控件 - css样式在更新时消失(IE8)

时间:2011-01-30 10:27:25

标签: asp.net user-controls updatepanel

我在UpdatePanel中有一个用户控件。一旦事件被触发并更新用户控件 - 它似乎失去了它的CSS样式。这只发生在IE8中,而在Chrome和FF中则很好。

用户控件,例如:

<style type="text/css">
    div.test
    {
        width: 500px;
        height: 400px;
        background-color: #0000BB;
        color: #FFFFFF;
        border: 2px solid #11CC00;
    }
</style>
<div id="div123" runat="server" class="test"></div>

public void SetText(string text)
{
     div123.InnerText = text;
}

使用UpdatePanel内的用户控件并更新它的页面:

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
 <ContentTemplate>
    <div id="div1" runat="server">
        <uc:TestUC ID="test1" runat="server"></uc:TestUC>
     </div>
  <asp:Button ID="Button1" runat="server" OnClick="Button1_OnClick" Text="Click" />
 </ContentTemplate>
</asp:UpdatePanel>

protected void Button1_OnClick(object sender, EventArgs e)
{
     test1.SetText(DateTime.Now.ToString());
}

在Chrome和FF中它似乎按预期工作(按钮点击导致当前时间显示在用户控件中,没有其他事情发生),但在IE8中,用户控件内的div丢失其样式(背景颜色,边框)

可能导致此问题的原因,以及可以采取哪些措施来阻止它?

4 个答案:

答案 0 :(得分:3)

此问题提到here

我尝试了这个建议 - 在OnInit中注册css链接 - 它似乎有效。

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    ScriptManager sm = ScriptManager.GetCurrent(Page);
    if (!sm.IsInAsyncPostBack)
    {
         string css = string.Format("<link rel=\"stylesheet\" href=\"{0}\" type=\"text/css\" />", ResolveUrl(CssClassFile));
         ScriptManager.RegisterClientScriptBlock(this, typeof(MyBlahControl), "MyBlahId", css, false);
    }
 }

答案 1 :(得分:2)

我有类似的问题  我解决了将<link ..<page>移动到<header>的问题{/ 1}}。

由于我使用MasterPage并且我不想在所有页面中使用链接,因此我发现将ContentPlaceHolder放在MasterPage的标题中很有用

<head id="Head1" runat="server">
  ...
  <asp:ContentPlaceHolder ID="HeaderContentPlaceHolder" runat="server"/>
</head>

然后是所需页面内的链接:

<asp:Content ID="Content2" ContentPlaceHolderID="HeaderContentPlaceHolder"       Runat="Server">
    <link rel="stylesheet" type="text/css" href="CSS/my.css" />
</asp:Content> 

答案 2 :(得分:0)

将css从用户控件复制到页面将解决它。

答案 3 :(得分:0)

我的应用程序遇到了同样的问题,它似乎杀死了我的动态面板中的所有样式...我通过将内容占位符(我将动态HTML写入的地方)移动到&lt;头&GT;在我的母版页上标记。

工作!谢谢大家:))