[英]Extending ASP.NET Panel
我试图创建一个扩展ASP.NET面板的新服务控件。
但是,每当我使用面板时,div等都会正确渲染。 但是框中的输入仅是:[title]
即:如果我这样做:
<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");
}
有一种更简单的方法可以做到这一点。
Panel
。 OnInit()
方法中,将CssClass
属性设置为roundedbox
样式(或任何其他名称)。 border-radius
。 例如:
.roundedbox {
border-radius: 3px;
}
如果您将继承Label,则可以这样进行:
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数据的情况下将其输出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.