我想将datalist渲染为div而不是table,重复列将由div上的float样式修复。
所以任何人都知道覆盖渲染方法来做到这一点。
感谢。
答案 0 :(得分:10)
我找到了这个解决方案,但我发布了它以帮助其他人;
有些用户建议使用转发器,这是正确的,但在div
table
而不是datalist
RepeatLayout=RepeatLayout.Flow
这将使span
与br
成为一致。
但是Horizontal
使用RepeatDirection
会删除br
但仍使用span
呈现的项目。
RepeatDirection=RepeatDirection.Horizontal
此语句将移除br
,但仍会移除使用span
呈现的项目。
如果您不想使用RenderContents
,请覆盖divs
在span
之外创建自己的br
并删除Horizontal RepeatDirection
,如下所示:
protected override void RenderContents(HtmlTextWriter w)
{
writer.WriteBeginTag("div");
writer.WriteAttribute("id", this.ClientID);
writer.WriteAttribute("class", cssClass);
writer.Write(HtmlTextWriter.TagRightChar);
foreach (DataListItem li in this.Items)
{
writer.WriteBeginTag("div");
writer.WriteAttribute("id", li.ClientID);
writer.WriteAttribute("class", li.CssClass);
writer.Write(HtmlTextWriter.TagRightChar);
li.CssClass = null; // clear css not to added in span
li.RenderControl(w);
writer.WriteEndTag("div");
}
writer.WriteEndTag("div");
}
我的问候
答案 1 :(得分:2)
使用<asp:Repeater>
控件而不是<asp:DataList>
控件。
在<ItemTemplate>
的{{1}}范围内,您可以使用<asp:Repeater>
标签来控制布局,因为转发器除了您提供的内容之外不会呈现任何自己的html。
答案 2 :(得分:1)
我总是将DataList设置为Flow布局,如:
RepeatLayout="Flow" CssClass="my_repeater_cssclass"
这里的问题是,如上所述,.NET仍然会为您提供 br 标记。
我的解决方案是设置DataList生成的br标签:none通过应用于DataList本身的CSS类。
.my_repeater_cssclass br
{
display : none;
}
然后,如果由于某种原因你有br标签你想要显示,只需给你的br标签一个css类并让它做你想要的...就像我的实际例子我最终用它来清除每一行后都有一个浮点数:
.my_repeater_cssclass br.clear
{
display : block;
clear : both;
}
如果你有很多的br标签需要处理,那么这可能不是你的解决方案。但我觉得这很简单。