C# 在我的ASP.NET Codebehind中使用StringBuilder编写HTML是一种好的做法吗?

C# 在我的ASP.NET Codebehind中使用StringBuilder编写HTML是一种好的做法吗?,c#,asp.net,stringbuilder,C#,Asp.net,Stringbuilder,我很想听听其他开发人员对我通常采用的方法的看法。我有一个web应用程序,asp.NET2.0,c# 我通常写下拉列表、表格、输入控件等的操作是在使用StringBuilder的代码中,并写一些类似于sb.Append(“ 我发现自己不太习惯于使用许多.net控件,因为我通常会在后面的代码中写出html。当我想使用jQuery或调用JavaScript时,我只会像sb.Append(“td…onblur='fnCallJS()”一样将该函数调用放在sb.Append标记中 我对这种方法非常熟悉。对

我很想听听其他开发人员对我通常采用的方法的看法。我有一个web应用程序,asp.NET2.0,c#

我通常写下拉列表、表格、输入控件等的操作是在使用StringBuilder的代码中,并写一些类似于sb.Append(“ 我发现自己不太习惯于使用许多.net控件,因为我通常会在后面的代码中写出html。当我想使用jQuery或调用JavaScript时,我只会像sb.Append(“td…onblur='fnCallJS()”一样将该函数调用放在sb.Append标记中

我对这种方法非常熟悉。对于数据访问,我使用EntitySpace

我只是有点好奇这种方法是不是非常错误,好吧,取决于上下文,好的,学习3.0的时间等等。我对学习很感兴趣,只是在寻找一些输入


编辑

在阅读了这里的评论之后,听起来我应该看看MVC。我还没有这样做。唯一犹豫不决的是,现有的项目就是这样,现有的。有很多代码已经按照我解释的方式完成了,很难想象修改它会涉及到什么,这样做的好处,以及学习那需要什么

我从注释中得到的另一点是,我的代码背后不应该包含太多的sb.Append代码,而现在它在许多函数中填充了它。对我来说,它并不凌乱,但这是因为我知道每个函数的作用,并且可以查看它,哦,它写出了x、y和z

对于我来说,在.aspx部分上有一个div,然后在后面的代码中使用StringBuilder构建该部分的.innerHtml并不少见

再次感谢你的评论。我一边阅读一边思考

我通常在代码后面写出html

这部分有点奇怪,我不推荐WebFras。如果你想这样做,考虑一下ASP.NET MVC项目。

在webforms中,您确实希望html的内容与标记而不是代码共存。两者应保持分离。您也不希望一个庞大的stringbuilder包含整个页面。这将迫使您将整个页面保留在内存中两次(一次用于stringbuilder字节,另一次用于最后生成的字符串)而不是在生成响应流时将页面写入响应流。这意味着每个请求都有更多内存,这实际上会扼杀可伸缩性


为此,我将把stringbuilder代码的不同部分抽象为自定义/用户控件,您可以在aspx标记中使用这些控件。这些控件可以使用stringbuilder创建其输出。这意味着您只需要在内存中保留足够的html标记,就可以一次呈现一个控件。它还允许您更轻松地重用comm跨页面甚至跨站点进行标记。

这是一个很大的问题,它可能会变得非常混乱……必须避开所有"或者搞乱回车符。当然你可以编程,但是如果你想复制/粘贴代码呢?听起来像是一场噩梦,而且要做的工作远远超过它的价值。

有时你需要在代码中生成一些HTML,但一般来说,你想把HTML留在它所属的地方,而这与你的代码是分开的VS IDE是一个非常好的HTML编辑器。使用它。

听起来您应该编写一个自定义控件,并使用HtmlTextWriter来编写标记


或者更合适的是一个用户控件,在aspx页面中有标记,在代码中有其他任何内容。

如果您使用这种方法,您应该将您的开发工作迁移到ASP.Net MVC。而ASP.Net则积极尝试使用web控件抽象HTML、CSS、JavaScript等。ASP.Net MVC是围绕nd是一种直接控制标记本身的范例(尽管这可能是两者之间的最小区别——即使从长远来看你坚持使用ASP.Net,你也应该仔细阅读它,至少知道替代方案)


否则,如果操作得当,您所做的工作将正常工作(尽管您将一直与框架抗争),但我建议改用。它在内部使用StringBuilder,因此两者的性能特征相同,但语义与.Net framework的其余部分更一致(例如,Write vs.Append).

我认为这种方法有点违背了webforms试图实现的目标(将标记和代码分离)。

我要冒险一试,猜想您可能来自“经典”ASP(vbScript)或PHP背景

我的背景是“经典ASP”,我对Webforms模型的第一次尝试与你的基本相同,一旦我开始使用它们并理解它们,我就再也没有回头看过。但是在理解页面生命周期如何与各种WebForm控件交互时,有一个不连续的学习曲线

在ASP.net WebForms vs MCV上查找各种线程,看看哪种线程最适合您的项目需要。MVC不是万能的,但在许多方面,如果您来自“经典ASP”或PHP背景,您可能会更熟悉


从实际的角度来看,假设您坚持使用WebForms,如果其他开发人员可能会参与到项目中,您的目标是尽可能多地使用内置控件,因为这比他们熟悉的更可能。显而易见,您使用控件的次数越多,您会使用的次数越多熟悉他们能做什么和不能做什么,不久你就会发现自己编写了自己的控件来填补空白,或者找到现有的第三方控件。

我知道这个帖子有点老了,已经得到了很好的回答,我只是想我会“附加”(双关语)我的答案,因为我正在使用的代码就是我自己