0

このHTML要素を.csで「生成」するとしますPage_Load()

foreach (Object obj in Objects)
{
    Literal boxStart = new Literal();
    boxStart.Text = "<div class=\"option-box\">";   

    Literal boxEnd = new Literal();
    boxEnd.Text = "</div";          

    HiddenField hf = new HiddenField();
    hf.Value = "0";
    hf.ID = "category" + obj.ID;

    panelCategorieGuida.Controls.Add(boxStart);
    panelCategorieGuida.Controls.Add(hf);
    panelCategorieGuida.Controls.Add(boxEnd);
}

その後、クライアント側で、いくつかの「hf.Value」が変更されます(いくつかのJS関数のおかげで)。より、PostBackで:

protected void cmdCerca_Click(object sender, EventArgs e)
{
    foreach (HiddenField hf in panelCategorieGuida.Controls.OfType<HiddenField>())
    {

    }
}

option-boxクラス(各HiddenFieldのメインdiv上)をoption-box-selectedhf.Valueが「1」の場所に変更したいと思います。

どうすればいいですか?もちろん、ポストバックでJavascript関数/コントロールを回避します。

4

2 に答える 2

1

これはdiv、文字通りではなく、サーバー側のコントロールとして作成することで実行できます。このタグはHtmlGenericControlで作成できます:

foreach (Object obj in Objects)
{
    HtmlGenericControl div = new HtmlGenericControl("div");
    div.Attributes["class"] = "option-box";

    HiddenField hf = new HiddenField();
    hf.Value = "0";
    hf.ID = "category" + obj.ID;

    div.Controls.Add(hf);
    panelCategorieGuida.Controls.Add(div);
}

これで、各非表示フィールドがサーバー側のコントロールに直接ネストされ、単純なプロパティdivを介してアクセスできるようになります。Parent

protected void cmdCerca_Click(object sender, EventArgs e)
{
    foreach (HtmlGenericControl div in panelCategorieGuida.Controls.OfType<HtmlGenericControl>())
    {
        HiddenField hf = div.Controls.OfType<HtmlGenericControl>()[0]; //leaving out all the exceptions handling
        if (String.Equals(hf.Value, "1"))
        {
            div.Attributes["class"] = "option-box-selected";
        }
    }
}
于 2012-05-07T15:32:54.947 に答える
0

boxStart.Attributes ["class"] = "someClass" <=これは、コードビハインドでクラス属性を変更する方法です。

于 2012-05-07T15:16:39.547 に答える