asp.net – 使用HtmlTextWriter渲染服务器控件?
我正在编写ASP.NET服务器控件的RenderContents()方法.该方法使用
HtmlTextWriter对象来呈现输出内容.对于我正在编写的控件,使用HtmlTextWriter的方法似乎需要大量代码行才能打开和关闭每个标记并将每个属性添加到流中.最后,我觉得我最终会得到比它需要的时间长得多的代码.
我想如果我使用像StringBuilder这样的可链接类,我的代码会更清晰,更容易编写. 我想知道的是,有没有理由使用HtmlTextWriter对象来呈现我的整个控件的内容?除了安全检查(我假设),它包括确保您不以错误的顺序写标签或创建无效标记,我没有看到原因. 看起来像这样做会更容易: protected override void RenderContents(HtmlTextWriter output) { StringBuilder s = new StringBuilder(); s.Append("lots") .Append("of") .Append("strings"); output.BeginRender(); output.Write(s.ToString()); output.EndRender(); } 有什么理由说这是个坏主意吗? 更新 public class ChainedHtmlTextWriter { private HtmlTextWriter _W; public ChainedHtmlTextWriter(HtmlTextWriter writer) { _W = writer; } public ChainedHtmlTextWriter Write<T>(T value) { _W.Write(value); return this; } public ChainedHtmlTextWriter WriteLine<T>(T value) { _W.WriteLine(value); return this; } } 解决方法
我在开发人员遵循您正在探索的可怕路径的应用程序上工作.这让我们回想起你必须编写自己的ISAPI dll的日子,这些dll吐出了html代码.工作中一直是一个令人头疼的问题.如果你的代码主要是字符串,那么就会出现问题.
我更改的这种类型的大多数代码我实例化服务器对象,根据需要配置它们的属性,然后告诉它们.RenderControl(writer).这使代码更易于阅读和使用.如果这带来了性能损失,我愿意接受它(实际上,应用程序通常在我做出更改后运行得更快,所以传闻情况并非如此,但我还没有描述过我的代码). 在HTML标准发生变化时,对字符串进行硬编码的一个简单缺点是.我工作的代码是在04/05写的,从那以后< BR>已成为< br />和大写的html标签不再是Kosher等等.如果他们一直在使用服务器控件,那些服务器控件已经更改了他们输出的html而我们不需要做任何事情.这只是一个简单的例子. 编辑:哦,顺便说一句,BeginRender和EndRender没有任何实现.它们是占位符,您可以在HtmlTextWriter派生类中覆盖和提供自定义功能. 编辑2:有时总是使用服务器控件有点繁琐,比如容器和东西.我会做很多.Controls.Add()然后再渲染容器.所以有时我这样做: writer.AddAttribute(HtmlTextWriterAttribute.Class,"myContainerClass"); writer.RenderBeginTag(HtmlTextWriterTag.Div); // do some stuff,.RenderControl on some other controls,etc. writer.RenderEndTag(); 如上所述,即使div的html在将来发生变化,这也将呈现正确的html,因为我没有任何硬编码的字符串. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – UpdatePanel中的动态创建控件?
- asp.net – 控制器!=业务层?
- asp.net-mvc – Server 2008 R2上的MVC – 如何?
- asp.net – 终止所有会话,然后是应用程序结束事件
- asp.net-mvc – EditorFor()和additionalViewData:如何在h
- “XmlDocumentationProvider”不实现接口成员“IDocumentat
- 使用ASP.NET DataBinding的C#4.0动态对象
- asp.net-mvc – 如何从asp.net MVC 4应用程序中的FileResul
- asp.net – sitecore模板标准值布局不更新所有项目,布局未加
- .net – HttpHandler在IIS 7中不起作用
- asp.net – 类型“……”含糊不清:它可能来自程
- Asp.net实现MVC处理文件的上传下载功能实例教程
- asp.net – MVC的最佳实践..使用接口的ViewModel
- asp.net – 通过GET访问Mvc Web API复杂对象查询
- asp.net-mvc – 在数据库中存储ASP.Net MVC视图
- asp.net-mvc-3 – 修改StringLength验证的默认Er
- .net – 你用你的单元测试测试什么?
- ASP.Net MissingMethodException – 找不到“cto
- 如何使用ASP.NET中的C#代码以PDF,HTML和DOC格式导
- 如何在ASP.NET中处理长时间运行的数据库查询