2011-01-05 135 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

相關問題