Пользовательские элементы управления внутри UpdatePanel - стили CSS исчезли при обновлении (IE8) - PullRequest
4 голосов
/ 30 января 2011

У меня есть элемент управления внутри 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 ]

3 голосов
/ 31 января 2011

Эта проблема упоминается здесь .

Я попробовал предложение - зарегистрировать ссылку css в OnInit - и похоже, что оно работает.

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);
    }
 }
2 голосов
/ 29 марта 2012

У меня была похожая проблема.
Я решил ее, переместив css <link .. из <page> в <header>.

Так как я использую 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> 
0 голосов
/ 03 июня 2015

У меня была та же проблема с моим приложением, казалось, что это убило все стили в моей динамической панели ... Я исправил это, переместив заполнитель содержимого (место, куда я пишу динамический HTML) в тег на моем главная страница.

Рабочая! Спасибо всем:)

0 голосов
/ 23 апреля 2013

Скопируйте CSS из пользовательского элемента управления на страницу, чтобы решить ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...