c# – 在Asp.net WebControls,UserControls,Controls上覆盖Render方法时的最佳实践
作者:互联网
在创建自定义WebControl,UserControl,Control时,需要覆盖各种Render方法,主要有两种方法可以实现:
快速又脏:
public override void RenderControl(HtmlTextWriter writer)
{
writer.Write("<div class=\"{0}\"><a href={1}>{2}</a>", CssClass, "/someurl.aspx", LocalizedStrings.EditLinkText);
base.RenderControl(writer);
writer.Write("</div>");
}
漫长而干净:
public override void RenderControl(HtmlTextWriter writer)
{
writer.WriteBeginTag(HtmlTextWriterTag.Div.ToString());
writer.WriteAttribute(HtmlTextWriterAttribute.Class.ToString(), CssClass);
writer.Write(HtmlTextWriter.TagRightChar);
var link = new HtmlAnchor();
link.HRef = "/someurl.aspx";
link.Title = LocalizedStrings.EditLinkTitle;
link.InnerText = LocalizedStrings.EditLinkText; ;
link.Attributes.Add(HtmlTextWriterAttribute.Class.ToString(), "someclass");
link.RenderControl(writer);
base.RenderControl(writer);
writer.WriteEndTag(HtmlTextWriterTag.Div.ToString());
}
我想知道第二种方法是否值得.
解决方法:
当我开发网页控件时,我曾问自己一个问题.为了尝试解决它,我反编译了一个telerik的库,然后我看到了它们如何实现Web控件.他们开发了许多组件并使用第二个近似值.
在我看来,这是最好的选择,因为如果控件很复杂,你的代码会变成很多string.format或类似的东西,很难理解和修改.当然第二种选择也可能不清楚,但只需很少的实用方法就可以创建高度可维护的控件.
标签:c,asp-net,override,coding-style,web-controls 来源: https://codeday.me/bug/20190620/1245440.html