在具有动态分配 ID 的嵌套转发器中将 class 附加或添加到 div?
Append or add a class to a div in a nested repeater with a dynamically assigned ID?
我在另一个中继器中安装了这个中继器。
<asp:Repeater ID="rpDB_item" runat="server" OnItemDataBound="rpDB_item_ItemDataBound">
<ItemTemplate>
<div class="row anj" id="ncollapse<%# ((((RepeaterItem)Container.Parent.Parent).ItemIndex)) %>" >
...
</div>
</ItemTemplate>
</asp:Repeater>
我想做的是用 id=ncollapse(x)
和 .collapsed
附加到行的 class。例如,可能会有多个带有 id=ncollapse4
的 div。我如何将代码隐藏 (C#) 中的 class 附加到带有 .collapsed
class 的 div?或者在 aspx 页面上设置内联 class 会更好吗?我更愿意使用 switch 作为定义语句,因为 sStatus
可能有几个选项。
我试过了
HtmlGenericControl nc = (HtmlGenericControl)(e.Item.FindControl("ncollapse"+((((RepeaterItem)e.Item.Parent.Parent).ItemIndex).ToString())));
然后设置
nc.Attributes["class"] = "collapsed"
在后面的代码中,但在 nc
上得到一个空引用(它似乎总是空的);还有,
<div class="row anj <%# switch (DataBinder.Eval(Container.DataItem,"sStatus").ToString())
{ case "OFFLINE": case "RECOVERY_PENDING": case "UNKNOWN":
Response.Write("collapsed");
break;
default:
Response.Write("");
break;
};%> id="<%# (DataBinder.Eval(Container.DataItem,"sStatus").ToString() == "OFFLINE" ? "n" : "ncollapse"+((((RepeaterItem)Container.Parent.Parent).ItemIndex).ToString())) %>">
switch
给我一个错误。不确定我要去哪里或下一步该去哪里。想法?
可能有一种方法可以使您的 aspx 语法正确,但它值得吗?它几乎不可读。我建议将此逻辑移到代码后面,然后从标记中调用它。易写、易读、易管理。
页面后面的代码:
protected string getRowCollapsedClass(String sStatus)
{
switch (sStatus)
{
case "OFFLINE":
case "RECOVERY_PENDING":
case "UNKNOWN":
return "collapsed";
default:
return String.Empty;
}
}
然后标记变得非常简单:
<div class='row anj <%# getRowCollapsedClass(Eval("sStatus").ToString()) %>'
id 值也是如此。请记住将索引作为第二个参数传递。
我在另一个中继器中安装了这个中继器。
<asp:Repeater ID="rpDB_item" runat="server" OnItemDataBound="rpDB_item_ItemDataBound">
<ItemTemplate>
<div class="row anj" id="ncollapse<%# ((((RepeaterItem)Container.Parent.Parent).ItemIndex)) %>" >
...
</div>
</ItemTemplate>
</asp:Repeater>
我想做的是用 id=ncollapse(x)
和 .collapsed
附加到行的 class。例如,可能会有多个带有 id=ncollapse4
的 div。我如何将代码隐藏 (C#) 中的 class 附加到带有 .collapsed
class 的 div?或者在 aspx 页面上设置内联 class 会更好吗?我更愿意使用 switch 作为定义语句,因为 sStatus
可能有几个选项。
我试过了
HtmlGenericControl nc = (HtmlGenericControl)(e.Item.FindControl("ncollapse"+((((RepeaterItem)e.Item.Parent.Parent).ItemIndex).ToString())));
然后设置
nc.Attributes["class"] = "collapsed"
在后面的代码中,但在 nc
上得到一个空引用(它似乎总是空的);还有,
<div class="row anj <%# switch (DataBinder.Eval(Container.DataItem,"sStatus").ToString())
{ case "OFFLINE": case "RECOVERY_PENDING": case "UNKNOWN":
Response.Write("collapsed");
break;
default:
Response.Write("");
break;
};%> id="<%# (DataBinder.Eval(Container.DataItem,"sStatus").ToString() == "OFFLINE" ? "n" : "ncollapse"+((((RepeaterItem)Container.Parent.Parent).ItemIndex).ToString())) %>">
switch
给我一个错误。不确定我要去哪里或下一步该去哪里。想法?
可能有一种方法可以使您的 aspx 语法正确,但它值得吗?它几乎不可读。我建议将此逻辑移到代码后面,然后从标记中调用它。易写、易读、易管理。
页面后面的代码:
protected string getRowCollapsedClass(String sStatus)
{
switch (sStatus)
{
case "OFFLINE":
case "RECOVERY_PENDING":
case "UNKNOWN":
return "collapsed";
default:
return String.Empty;
}
}
然后标记变得非常简单:
<div class='row anj <%# getRowCollapsedClass(Eval("sStatus").ToString()) %>'
id 值也是如此。请记住将索引作为第二个参数传递。