如何在代码后面的转发器内部设置div类?

时间:2010-10-23 10:53:34

标签: c# asp.net html css

CSS & html

id0是div的类,它有背景作为精灵图像,在这个div里面。这是一个链接列表(在转发器中)..当用户将鼠标悬停在链接上时... div的背景图像显示差异相应的精灵图像部分

现在我希望将类id1到id5设置为转发器列表的类...现在我该怎么做呢?

就像转发器里面的链接列表来自DB ..如何在这个转发器内部创建div标签

如何为将要创建的5个div中的每一个设置类并在其上设置这些类?

像以前一样,我有简单的标记,但现在我必须使用转发器生成链接列表。那我现在如何应用CSS?

请提出一些想法......谢谢

[编辑] 好的尝试过这个.. 在标签和后面的代码中在转发器中添加了div标签: -     rpt1.FindControl(“myDiv”)。Controls.Add(class = ??)//在这里输入什么 用于循环或什么? [编辑]这不起作用..怎么回事?**

for(int i=1;i<6;i++)
                {
            rpt1.FindControl("myDiv").Controls.Add("class=id[i]");

            }

上面给出了以下错误: -

'System.Web.UI.ControlCollection.Add(System.Web.UI.Control)'的最佳重载方法匹配有一些无效的参数

现在如何设置div的类?

pch..made dilly wrong..made changes ..

 for (int i = 1; i < 6; i++)
                    {
                        string divClass = "id";
                        rpt1.FindControl("myDiv").Controls.Add("class=id" + i);

                    }

仍然是同样的错误..

[编辑]

尝试了以下......工作

rpt1.FindControl("myDiv").Attributes.Add("class","id" +i);

[编辑]

我现在尝试了以下内容..

rpt1.FindControl("myDiv").Attributes["class"] = "id" + i;

它说“不能将带有[]的索引应用于'方法组'”???

类型的表达式

5 个答案:

答案 0 :(得分:13)

ItemDataBinding方式

为了获得转发器的ItemTemplate中的元素,你必须声明它runat =“Server”并为它设置一个id(id不是必需的,但简化了事情)。如果您使用div执行此操作,则可以将其放入ItemDataBound event内并设置课程。

void Repeater_ItemDataBound(Object Sender, RepeaterItemEventArgs e) {
  if (e.Item.ItemType == ListItemType.Item
    || e.Item.ItemType == ListItemType.AlternatingItem)   
  {
    ((HtmlGenericControl)(e.Item.FindControl("myDiv"))).
       Attributes["class"] = "id" + index++;
  }
}

您需要声明索引变量并在设置每个类时增加它。


替代方式

更简单,更简洁的方式IMHO是使用数据绑定直接在View中设置类

<asp:Repeater ID="rpt" runat="server">
  <ItemTemplate><div class="<%# GetDivClass() %>">a div</div></ItemTemplate>
</asp:Repeater>

并在后面的代码中声明了获取数据的方法

private int index = 1;

protected string GetDivClass()
{
  return "div" + index++;
}

答案 1 :(得分:2)

如果您将div创建为HTML控件,请按以下方式设置类:

HtmlControl div = new HtmlGenericControl("div");
div.Attributes.Add("class", "myClassName");

否则,如果您已将其创建为服务器控件(通过包含runat="server"属性),则可以在控件层次结构中搜索它并添加属性。

答案 2 :(得分:2)

尝试向DIV标记添加ID和runat =“server”。这将使每个DIV成为控件:

<li><a href=# class="mysprite id1">Text1<div id="myDiv" runat="server">&nbsp;</div></a><br /></li>

这样,您用于动态添加类的代码行(如下所示)应该有效:

rpt1.FindControl("myDiv").Attributes.Add("class","id" +i);

答案 3 :(得分:1)

我不确定我是否理解你想要达到的目标,但是.Controls.Add(“classblah”)将不起作用。

当您希望将控件放在该控件中时,这是打算的,例如。

HyperLink myHyperLinkControl;
rpt1.FindControl("myDiv").Controls.Add(myHyperLinkControl);

将呈现近似

<div id="myDiv">
<a href="#">my hyperlink</a>
</div>

你想抓住li并操纵它的属性。

var li = nav.FindControl("name") as HtmlGenericControl; 
nav.attributes["class"] = "mysprite id" + Container.DataItemIndex

答案 4 :(得分:0)

这是最好的

<asp:Repeater ID="rptDocuments" runat="server">
    <ItemTemplate>
        <div class='element<%# Container.ItemIndex%>'/>
</ItemTemplate>
</asp:Repeater>