在HtmlTextWriterAttribute中实现runat

时间:2011-01-04 08:44:34

标签: c# runat

亲爱的朋友们,我有网页自定义控件

这个Window类的渲染功能

    protected override void RenderContents(HtmlTextWriter wr)
    {
        wr.AddAttribute("runat", "server",true);
        wr.AddAttribute("id", this.UniqueID, false);
        wr.RenderBeginTag(HtmlTextWriterTag.Div);
        wr.RenderEndTag();
        wr.WriteLine();
        base.RenderContents(wr);
    }

protected override void RenderContents(HtmlTextWriter wr) { wr.AddAttribute("runat", "server",true); wr.AddAttribute("id", this.UniqueID, false); wr.RenderBeginTag(HtmlTextWriterTag.Div); wr.RenderEndTag(); wr.WriteLine(); base.RenderContents(wr); }


在网页上使用:


浏览器资源结果:

(cc1:Window ID="Window1" runat="server" ) (div) runat="server" id="aaaa"(/div)

2 个答案:

答案 0 :(得分:1)

你的问题中没有一个人真正陈述过一个问题。无论如何,我认为您希望自定义控件呈现为<div runat="server">

public class Window : WebControl {
    public Window() : base(HtmlTextWriterTag.Div) {}

    protected override void AddAttributesToRender(HtmlTextWriter writer) {
        writer.AddAttribute(HtmlTextWriterAttribute.Id, UniqueID);
    }
}
  1. 你应该在WebControl上调用接受HtmlTextWriterTag的构造函数。
  2. 您应该覆盖AddAttributesToRender(而不是RenderContents)以向元素添加属性。
  3. runat="server"仅在解析您的HTML代码时使用,并且在您的控件中没有用处。

答案 1 :(得分:0)

我不确定您的使用示例是否只是在发布时的拼写错误和格式错误,或者实际上是这样使用它(例如,我知道您发布了<...> {{1这不是我的问题)。


您应该首先将控件类实现为suggested by Simon Svensson

然后,如果你想让id =“aaaa”的div成为你的控件div标签中的html标签,你应该像这样使用它(注意结尾(...)):

在网页上使用:

</cc1:Window>

浏览器源结果:

<cc1:Window ID="Window1" runat="server">
  <div id="aaaa">Text content here</div>
</cc1:Window>

正如Simon所说,<div id="Window1"> <div id="aaaa">Text content here</div> </div> 主要用于服务器控件,对渲染的HTML控件没有意义。