将CSS类添加到后面的代码中的div

时间:2010-09-18 14:17:16

标签: c# css

我有一个div,我试图在代码中添加一个CSS类,但是当我尝试时收到以下错误

Property or indexer 'System.Web.UI.HtmlControls.HtmlControl.Style' cannot be assigned to -- it is read only

我使用以下代码:

protected void BTNEvent_Click(object sender, ImageClickEventArgs e)
{
    BtnventCss.Style= "hom_but_a";                 
}

有人可以帮助我吗?

8 个答案:

答案 0 :(得分:48)

如果:

 <asp:Button ID="Button1" runat="server" CssClass="test1 test3 test-test" />

添加或删除类,而不是使用

覆盖所有类
   BtnventCss.CssClass = "hom_but_a"

保持HTML正确:

    string classname = "TestClass";

    // Add a class
    BtnventCss.CssClass = String.Join(" ", Button1
               .CssClass
               .Split(' ')
               .Except(new string[]{"",classname})
               .Concat(new string[]{classname})
               .ToArray()
       );

     // Remove a class
     BtnventCss.CssClass = String.Join(" ", Button1
               .CssClass
               .Split(' ')
               .Except(new string[]{"",classname})
               .ToArray()
       );

这保证了

  • 原始的类名仍然存在。
  • 没有双重姓名
  • 没有令人不安的额外空间

特别是当客户端开发在一个元素上使用多个类名时。

在您的示例中,使用

   string classname = "TestClass";

    // Add a class
    Button1.Attributes.Add("class", String.Join(" ", Button1
               .Attributes["class"]
               .Split(' ')
               .Except(new string[]{"",classname})
               .Concat(new string[]{classname})
               .ToArray()
       ));

     // Remove a class
     Button1.Attributes.Add("class", String.Join(" ", Button1
               .Attributes["class"]
               .Split(' ')
               .Except(new string[]{"",classname})
               .ToArray()
       ));

你应该将它包装在方法/属性中;)

答案 1 :(得分:30)

<div runat="server">已映射到HtmlGenericControl。 尝试使用BtnventCss.Attributes.Add("class", "hom_but_a");

答案 2 :(得分:7)

Style属性获取所有级联样式表(CSS)属性的集合;你不能设置它。

请尝试BtnventCss.CssClass = "hom_but_a";

我假设BtnventCss是一个WebControl。

我刚看到你可能正在使用<div runat="server"...

如果是,您可以尝试:

BtnventCss.Attributes.Add("class", "hom_but_a");

您可以将div设为asp:panel - 它们将呈现相同的效果,您将获得更好的服务器端支持。

答案 3 :(得分:5)

对于非ASP.NET控件,即div, table, td, tr等HTML控件,您需要首先使它们成为服务器控件,分配ID,然后从服务器代码中分配属性:

ASPX页面

<head>
    <style type="text/css">
        .top_rounded
        {
            height: 75px;
            width: 75px;
            border: 2px solid;
            border-radius: 5px;
            -moz-border-radius: 5px; /* Firefox 3.6 and earlier */
            border-color: #9c1c1f;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div runat="server" id="myDiv">This is my div</div>
    </form>
</body>

CS页面

myDiv.Attributes.Add("class", "top_rounded");

答案 4 :(得分:3)

您可以使用以下两种扩展方法。它们确保保留任何现有类,并且不会重复添加的类。

public static void RemoveCssClass(this WebControl control, String css) {
  control.CssClass = String.Join(" ", control.CssClass.Split(' ').Where(x => x != css).ToArray());
}

public static void AddCssClass(this WebControl control, String css) {
  control.RemoveCssClass(css);
  css += " " + control.CssClass;
  control.CssClass = css;
}

用法:hlCreateNew.AddCssClass("disabled");

用法:hlCreateNew.RemoveCssClass("disabled");

答案 5 :(得分:2)

Button1.CssClass += " newClass";

这不会删除该控件的原始类。试试这个,它应该有用。

答案 6 :(得分:1)

添加类到html元素,请参阅how to add css class to html generic control div?。答案类似于此处给出的答案,但展示了如何添加类到 html 元素。

答案 7 :(得分:0)

我也在寻找相同的解决方案。我想到了

BtnventCss.CssClass = BtnventCss.CssClass + " hom_but_a";

似乎工作正常,但我不确定这是否是个好习惯