2011-09-04 115 views
2

我想創建一個新的服務控制擴展ASP.NET面板。擴展ASP.NET面板

無論何時我使用我的面板,divs等渲染正確。 但在框中輸入唯一:[標題]

即:如果我這樣做:

<cc1:RoundedCornerBox id="MyBox" BoxWidth="100" BoxHeight="200"> This is the content that should be displayeed </cc1:RoundedBox> 

全部顯示爲: [myBox上]

(在一個盒子裏是正確)

這是我的代碼:

[DefaultProperty("Text")] 
[ToolboxData("<{0}:RoundedCornerBox runat=server></{0}:RoundedCornerBox>")] 
public class RoundedCornerBox : System.Web.UI.WebControls.Panel 
{ 

public int BoxWidth { get; set; } 
public int BoxHeight { get; set; } 


[Bindable(true)] 
[Category("Appearance")] 
[DefaultValue("")] 
[Localizable(true)] 
public string Text 
{ 
    get 
    { 
     String s = (String)ViewState["Text"]; 
     return ((s == null) ? "[" + this.ID + "]" : s); 
    } 

    set 
    { 
     ViewState["Text"] = value; 
    } 
} 

protected override void Render(HtmlTextWriter writer) 
{ 
    base.Render(writer); 
} 
protected override void RenderContents(HtmlTextWriter output) 
{ 
    output.Write(Text); 
} 


public override void RenderBeginTag(HtmlTextWriter writer) 
{ 
    base.RenderBeginTag(writer); 
    writer.Write("<div class=\"roundedcornr_lt\"></div>\n"); 
    writer.Write("<div class=\"roundedcornr_top\" style=\"width:" + BoxWidth.ToString() + "px\"></div>\n"); 
    writer.Write("<div class=\"roundedcornr_rt\"></div>\n"); 
    writer.Write("<div class=\"clear\"></div>\n"); 
    writer.Write("<div class=\"roundedcornr_lside\" style=\"height:" + BoxHeight.ToString() + "px\"></div>\n"); 
    writer.Write("<div style=\"width:" + BoxWidth.ToString() + "px; height:" + BoxHeight.ToString() + "px; background:white; float:left\">\n"); 



} 

public override void RenderEndTag(HtmlTextWriter writer) 
{ 
    base.RenderEndTag(writer); 
    writer.Write("</div>\n"); 
    writer.Write("<div class=\"roundedcornr_rside\" style=\"height:" + BoxHeight.ToString() + "px\"></div>\n"); 
    writer.Write("<div class=\"clear\"></div>\n"); 
    writer.Write("<div class=\"roundedcornr_bl\"></div>\n"); 
    writer.Write("<div class=\"roundedcornr_btm\" style=\"width:" + BoxWidth.ToString() + "px\"></div>"); 
    writer.Write("<div class=\"roundedcornr_br\"></div>"); 
    writer.Write("<div class=\"clear\"></div>\n"); 

} 

回答

0

如果w ^烏爾德繼承標籤,你會做這種方式:

 get 
     { 
      string result = (string) ViewState["Text"]; 
      if(result != null) 
       return result; 
      result = (string) base.Text; 
      if (!string.IsNullOrEmpty(result)) 
       return result; 
      return "[" + this.ID + "]"; 
     } 

不幸的是沒有「正常」的方式來獲得一個小組的內部文本,但是這是一個解決辦法:

 get 
     { 
      string result = (string) ViewState["Text"]; 
      if(result != null) 
       return result; 
      result = ((LiteralControl) this.Controls[0]).Text; 
      if (!string.IsNullOrEmpty(result)) 
       return result; 
      return "[" + this.ID + "]"; 
     } 

什麼你基本上做的是,你將面板中的文本(通過ASP.NET自動插入到Literal子控件中)並在沒有ViewState數據的情況下輸出它。

0

有一個更簡單的方法來做到這一點。

  • 創建控件並將其擴展爲Panel
  • 在其構造函數或OnInit()方法中,將CssClass屬性設置爲roundedbox樣式(或任何其他名稱)。
  • 將此樣式添加到您的CSS中,並使其包含border-radius

例如:

.roundedbox { 
    border-radius: 3px; 
}