2011-09-04 87 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; 
}