web-dev-qa-db-ja.com

コードビハインドでdivに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";                 
}

誰でも助けてくれますか?

33
Myworld

仮に:

 <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()
       );

これにより、

  • 元のクラス名は残ります。
  • 二重のクラス名はありません
  • 邪魔な余分なスペースはありません

特に、クライアント側の開発が1つの要素で複数のクラス名を使用している場合。

あなたの例では、

   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()
       ));

これをメソッド/プロパティでラップする必要があります;)

49
Caspar Kleijne

_<div runat="server">_はHtmlGenericControlにマップされます。 BtnventCss.Attributes.Add("class", "hom_but_a");を使用してみてください

31
Vinay B R

Style プロパティは、すべてのカスケードスタイルシート(CSS)プロパティのコレクションを取得します。設定できません。

BtnventCss.CssClass = "hom_but_a";代わりに。

私はBtnventCssがWebControlであると仮定しています。

おそらく<div runat="server"...

もしそうなら、あなたは試すことができます:

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

Divを asp:panel にすることができます-それらは同じものをレンダリングし、サーバー側のサポートが向上します。

7
Joe Ratzer

非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");
5
Vaibhav Saran

使用できる拡張方法は2つあります。既存のクラスが保持されることを保証し、追加されるクラスを複製しません。

_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");

3
user3484993
Button1.CssClass += " newClass";

これにより、そのコントロールの元のクラスは消去されません。これを試してください、それは動作するはずです。

2

[〜#〜] add [〜#〜]クラスをhtml要素に参照する cssクラスをhtml汎用コントロールdivに追加する方法? 。ここに与えられたものと同様の答えがありますが、addクラスをhtml要素。

1
Dov Miller