Применить CSS к одному экземпляру пользовательского элемента управления в ASP: NET - PullRequest
0 голосов
/ 28 ноября 2011

Хорошо, я создал простой пользовательский элемент управления, похожий на этот

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="PlaceHolderCMS.ascx.cs" Inherits="Controls_PlaceHolderCMS" %>

<div id="contentPlaceholder" runat="server" class="contentPlaceholderStyle">
</div>

Я использую это так

<div class="mainField" runat="server">             
  <cms:PlaceHolder ID="PlaceHolderCMS1" runat="server" class="PH1" />
  <cms:PlaceHolder ID="PlaceHolderCMS2" runat="server" />
</div>

Но моя проблема в CSS, я могу редактировать стили, связанные со всем элементом управления, например,

.contentPlaceholderStyle
{
    border-style :dashed;
    background-color:transparent;
    border-width:1px; 
    padding: 10px, 10px, 0px, 0px;  
    margin:15px;
    height:100px;
}

Но когда я пытаюсь стилизовать отдельный экземпляр пользовательского элемента управления , ничего не происходит . Я попробовал это из таблицы стилей, как это

.PH1
{    
    height:100px;
}

и из C #, вот так защищенная пустота Page_Load (отправитель объекта, EventArgs e)

{

PlaceHolderCMS1.Attributes["style"] = "width=" + width + "%; height:" + height + "px;" ;

}

Итак, мой вопрос: как я могу разместить атрибуты стиля для экземпляров моего пользовательского элемента управления? Я хочу иметь общие стили для всего управления и переопределять их для конкретных экземпляров, если это необходимо.

Заранее спасибо ....

Ответы [ 3 ]

2 голосов
/ 28 ноября 2011

Ваша проблема в том, что UserControl не отображает теги для себя. С тех пор это не к чему применять ваш класс. Поэтому вам абсолютно необходимо предоставить какое-либо пользовательское свойство CssClass для вашего элемента управления и назначить его некоторому контейнеру, который содержит все ваши дочерние элементы управления.

Разметка элемента управления:

<div class='<%= CssClass %>' >
    <div id="contentPlaceholder" runat="server" class="contentPlaceholderStyle">
    </div>
</div>

Код контроля:

[CssClassProperty]
public string CssClass
{
    get { return (string)(ViewState["CssClass"] ?? ""); }
    set { ViewState["CssClass"] = value; }
}
1 голос
/ 28 ноября 2011

Вы, кажется, применяете стили к самому пользовательскому элементу управления, но вы хотите применить стили к самому внешнему элементу в вашем элементе управления. Это не должно работать, если вы не переопределите свойства пользовательского элемента управления для ссылки на свойства самого внешнего div.

1 голос
/ 28 ноября 2011

Самый простой способ сделать это, вероятно, иметь несколько классов на элементе управления. Во время инициализации элемента управления вы можете добавить класс по умолчанию к любому, определенному вашим кодом, например:

this.CssClass += "contentPlaceholderStyle";

в вашей инициализации.

...