0

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

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);
    }


在网页上使用:

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


浏览器源结果:

(span id="Window1")(div runat="server" id="Window1") (/div) span) (div) id="aaaa"(/div)

4

2 回答 2

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. 您应该在接受 HtmlTextWriterTag 的 WebControl 上调用构造函数。
  2. 您应该覆盖 AddAttributesToRender(而不是 RenderContents)以向您的元素添加属性。
  3. runat="server"仅在解析您的 html 代码期间使用,并且在您的控件中没有用。
于 2011-01-04T08:57:30.443 回答
0

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


您应该按照Simon Svensson的建议开始实施您的控制类。

然后,如果您希望 id="aaaa" 的 div 成为您的控件 div 标签内的 html 标签,您应该像这样使用它(注意结尾</cc1:Window>):

在网页上使用:

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

浏览器源结果:

<div id="Window1">
  <div id="aaaa">Text content here</div>
</div>

正如 Simon 所说,runat="server"主要用于服务器控件,对于渲染的 HTML 控件没有任何意义。

于 2011-01-04T11:15:09.727 回答