2011-01-05 129 views
1
public class CustCtl : WebControl 
{ 
    protected override System.Web.UI.HtmlTextWriterTag TagKey 
    { 
     get 
     { 
      return HtmlTextWriterTag.Div; 
     } 
    }  
} 

使用此裸机控件,它会将根元素呈现为Div标记。但是,我怎样才能将属性添加到该控件将呈现的根元素HTML元素中,例如样式或ID。将属性添加到自定义控件的根HTML元素

谢谢! = D

回答

0

我在查看API时发现了这种方法。

这对我来说工作得很好,似乎是最合适的放置它的地方。只是简单地覆盖。

public override void RenderBeginTag(HtmlTextWriter writer) 
{ 
    writer.AddAttribute(HtmlTextWriterAttribute.Class, "[^_^]"); 
    base.RenderBeginTag(writer); 
} 
+0

该方法在自定义控件中被覆盖。因此,当它调用RenderBeginTag()时,我会按照我认为合适的方式插入属性。关于这个问题或我的回答有什么不清楚的地方? – 2011-01-05 21:50:06

+0

对不起,我看到你是提问者后删除了我的评论。看到我的答案的评论... – hunter 2011-01-05 21:51:43

0

如果你有你的HtmlTextWriter,你可以在渲染标签之前先添加一些属性。例如:

public void writeDivWithStyle(HtmlTextWriter writer, string style) 
{ 
    writer.AddAttribute(HtmlTextWriterAttribute.Style, style); 
    writer.RenderBeginTag(HtmlTextWriterTag.Div); 

    // more code here 

    writer.RenderEndTag(); // close the DIV 
} 
+0

“但是,我如何添加属性到该父元素,如风格或ID。”我是唯一一个阅读这部分内容的人吗? – hunter 2011-01-05 21:48:42

0

您应该能够使用:

CONTROL.Attribute.Add("..") //不正确的语法

看到this link

编辑:样品使用

Control control = this.FindControl("body"); 
HtmlControl divControl = new HtmlGenericControl("div"); 
divControl.Attributes.Add("id","myid"); 
divControl.Attributes.Add("class","myclass"); 
control.Controls.Add(divControl); 
+0

downvote的原因是什么? – VoodooChild 2011-01-05 21:48:56

+0

你是否想让我认为传递一个字符串参数给Add方法,它需要2个字符串参数,指向**父控件**,就像一个UNIX路径一样? – 2011-01-05 21:52:18

+0

是不是我,但给了提问者评论这是完全有效的,除了缺少的参数。我以不同的方式阅读这个问题 – hunter 2011-01-05 21:52:38

4

你可以在O内部做这样的事情nPreRender事件

public class CustCtl : WebControl 
{ 
    protected override void OnPreRender(EventArgs e) 
    { 
     base.OnPreRender(e); 

     WebControl parent = Parent as WebControl; 
     if (parent != null) 
     { 
      parent.Attributes.Add("key", "value"); 
     } 
    } 
} 
+0

感谢您的帮助。似乎有点容易做到这一点,因为它的意图和意义显而易见,而且要做的工作要少得多。 – 2011-01-05 21:48:45

+0

我以为你试图添加一个属性到控件的父级?我生气了,因为其他人的回答也不同, – hunter 2011-01-05 21:50:42

+0

啊,我明白了。有趣的是,“父元素”这个词是如何解释为“家长控制”的。但显然我在那一个少数。当我听到单词元素时,我会想到HTML。为了清晰起见,我将这个问题改为包含单词HTML D – 2011-01-05 22:01:09

0

[编辑,所有的意见后]简单地说,在Attributes.Add("key", "value");方法OnPreRender工作

+0

措辞可能有点模棱两可,但我不同意为什么。 “通过这个裸露的骨骼控件,它将**父母元素**作为Div标签。”关键术语是这个句子中的Element。我要求引用控件的父元素html。我没有在句子中指定一个父控件。 – 2011-01-05 21:54:14

+0

抱歉误会,然后选项2为您服务! ;)我会说“根元素”,因为当我读“父母”我想父母控制 – 2011-01-05 22:00:58

+0

哈哈可以理解。我更新了问题标题和正文以反映更清晰的版本。 – 2011-01-05 23:28:34

0

我认为最适当的方法或事件重写为:

protected override void AddAttributesToRender(HtmlTextWriter writer) 
{ 
    writer.AddAttribute("Key", "Value"); 
    base.AddAttributesToRender(writer); 
} 

检查msdn

相关问题