我使用此类代码,但呈现错误<li class="dd0"><div id="dt1"<a href="http://localhost:1675/Category/29-books.aspx">Books</a></div></li>
开始标记div中没有>
。有什么问题?
writer.WriteBeginTag("li");
//writer.WriteAttribute("class", this.CssClass);
writer.WriteAttribute("class", "dd0");
if (!String.IsNullOrEmpty(this.LiLeftMargin))
{
writer.WriteAttribute("style", string.Format("margin-left: {0}px", this.LiLeftMargin));
}
writer.Write(HtmlTextWriter.TagRightChar);
writer.WriteBeginTag("div");
writer.WriteAttribute("id", "dt1");
this.HyperLink.RenderControl(writer);
writer.WriteEndTag("div");
writer.WriteEndTag("li");
答案 0 :(得分:8)
您需要在编写属性后添加对writer.Write(HtmlTextWriter.TagRightChar)
的调用(就像您已经为li
元素所做的那样):
writer.WriteBeginTag("div");
writer.WriteAttribute("id", "dt1");
writer.Write(HtmlTextWriter.TagRightChar);
WriteBeginTag
{{1}}明确说明了这种行为:
WriteBeginTag方法不会写入标记元素的开始标记的结束尖括号(&gt;)。这允许将标记属性写入元素的开始标记。在调用WriteBeginTag方法时,使用TagRightChar常量来关闭开始标记。
答案 1 :(得分:1)
您不需要使用 writer.Write(HtmlTextWriter.TagRightChar); ,编写器足够聪明以关闭标记。再次使用 Write RenderEndTag时,您不需要提供参数。
编辑。我在这里谈论不同的方法。这是我将使用的代码:
output.AddAttribute("class", "dd0");
if (!String.IsNullOrEmpty(this.LiLeftMargin))
{
output.AddAttribute("style", string.Format("margin-left: {0}px", LiLeftMargin));
}
output.RenderBeginTag("li");
//output.Write(HtmlTextoutput.TagRightChar);
output.AddAttribute("id", "dt1");
output.RenderBeginTag("div");
this.HyperLink.RenderControl(output);
output.RenderEndTag(); //div
output.RenderEndTag(); //li
答案 2 :(得分:1)
或者,您可以这样做:
output.AddAttribute(HtmlTextWriterAttribute.Id, "dt1");
output.RenderBeginTag(HtmlTextWriterTag.Div);
output.RenderEndTag();
这将创建您想要的结果。将AddAttribute
放在RenderbeginTag
之前或属性不会出现是很重要的!
我认为这种方法很简洁。