0

假设我在 .cs 上“生成”这个 HTML 元素,位于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 回答