ASP.NET: Создать новый класс CSS программно из пользовательского контроля? - PullRequest
0 голосов
/ 30 июня 2011

У меня есть UserControl, который содержит, помимо прочего, этот модальный расширитель всплывающих окон AJAX:

<ajax:ModalPopupExtender ID="MPE" runat="server" 
 TargetControlID="btnChangePassword" PopupControlID="pnlPasswordChanging"
 BackgroundCssClass="modalBackground" DropShadow="true"
 CancelControlID="btnCancel" OnCancelScript="ULC_ChangePw_CancelBtnClick();" />

Ничего особенного здесь. Проблема связана с этим атрибутом BackgroundCssClass - для этого требуется класс CSS с именем modalBackground . К сожалению, я не могу добавить класс CSS из пользовательского элемента управления таким образом, чтобы он выдерживал постбэки.

Если я добавлю свой modalBackground класс на страницу .ascx :

<style type="text/css">
    .modalBackground
    {
        background-color: #A1A1A1;
        filter: alpha(opacity=70);
        opacity: 0.7px;
    }
</style>

... свойство будет отображаться при первой загрузке, но не после последующих обратных передач. Конечно, я мог бы определить modalBackground на самой странице или в отдельном отдельном файле CSS, который вызывается пользовательским элементом управления, но ни одно из решений не подойдет для меня.

Нет ли способа создать класс CSS программно и добавить его на страницу? В основном я ищу CSS, эквивалентный Javascript RegisterClientScriptBlock функции:

Dim controlNameScript = String.Format("<script type='text/javascript'> var AppMenuName = '{0}' </script>", Me.ClientID)
Me.Page.ClientScript.RegisterClientScriptBlock(myType, "ControlName", controlNameScript)

Спасибо!

Ответы [ 3 ]

1 голос
/ 01 июля 2011

Если CSS определен в вашем файле .ASCX, он должен отображаться каждый раз, с обратной передачей или нет. Если для самого элемента управления не установлено значение Visible = "false".

Одним из обходных путей является определение кода CSS в блоке asp: Literal на вашем элементе управления. Затем ваш элемент управления может предоставить публичную функцию, которая просто возвращает содержимое этого литерала вызывающей стороне. Если хост сделает ваш элемент управления невидимым, он может получить код CSS с помощью этой общедоступной функции и поместить его в раздел head страницы. Таким образом, определение CSS всегда должно быть там, независимо от настройки видимости элемента управления.

В более широком смысле Адам прав: лучше хранить CSS-код в файлах .CSS, где это возможно.

1 голос
/ 01 июля 2011

Было бы стандартным включить этот класс в CSS-файл, на который вы ссылаетесь на главной странице вашего сайта, или на конкретную страницу. Почему это не работает для вас?

0 голосов
/ 11 июля 2011

Хорошо, вот все, что мне нужно для решения моей проблемы:

    Me.Page.Header.Controls.Add(
        New LiteralControl("<style type=""text/css""> .modalBackground {background-color: #A1A1A1; filter: alpha(opacity=70); opacity: 0.7px;} </style>"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...