3

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

我通常写下拉列表、表格、输入控件等的方法是在使用 StringBuilder 背后的代码中并写出类似 sb.Append("

我发现自己没有使用很多 .net 控件,因为我通常在后面的代码中写出 html。当我想使用 jQuery 或调用 JavaScript 时,我只需将该函数调用放在我的 sb.Append 标记中,例如 sb.Append("td...onblur='fnCallJS()'。

我对这种方法很满意。对于数据访问,我使用 EntitySpaces。

我只是有点好奇这种方法是否严重错误,取决于上下文,好,是时候学习 3.0 等等。我对学习很感兴趣,只是在寻找一些输入。


编辑

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

我从评论中删除的另一件事是,我背后的代码实际上不应该包含很多 sb.Append 代码,而现在它在许多函数中都填充了它。对我来说这并不混乱,但那是因为我知道每个函数的作用,并且可以查看它并查看,哦,它会写出 x、y 和 z。

我经常在 .aspx 部分上有一个 div,然后在后面的代码中使用 StringBuilder 构建它的 .innerHtml。

再次感谢您的评论。我一边读一边想。

4

8 回答 8

2

我通常在后面的代码中写出html。

这部分有点奇怪,我不推荐用于网络表单。如果您想这样做,请考虑使用 asp.net mvc 项目。

在 web 表单中,您真的希望 html 的内容与标记而不是代码一起使用。两者应保持分开。您也不想要一个包含整个页面的巨大字符串生成器。这将迫使您将整个页面保存在内存中两次(一次用于 stringbuilder 字节,一次用于最后构建的字符串),而不是在构建页面时将页面写入响应流。这意味着每个请求需要更多的内存,这真的会扼杀可扩展性。

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

于 2010-03-25T03:26:14.523 回答
1

有时您需要在代码中生成一些 HTML,但一般来说,您希望将 HTML 留在它所属的位置,并且与您的代码分开。VS IDE 是一个非常好的 HTML 编辑器。用它。

于 2010-03-25T03:27:34.540 回答
1

我要冒昧地猜测您可能来自“经典” ASP (vbScript) 或 PHP 背景。

我的背景是“经典 ASP”,我对 Webforms 模型的第一次尝试与您的几乎相同,一旦我开始使用它们并理解它们,我就再也没有回头。尽管在理解页面生命周期如何与各种 WebForm 控件交互方面存在明显的学习曲线。

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

从实际的角度来看,假设您坚持使用 WebForms,如果其他开发人员有可能参与该项目,您的目标是尽可能使用更多的内置控件,因为这很可能是他们熟悉的. 很明显,您使用控件的次数越多,您就会越熟悉它们可以做什么和不能做什么,不久之后您会发现自己编写自己的控件来填补空白或找到现有的第 3 方控件。

于 2010-03-25T04:57:54.833 回答
0

你遇到的一个大问题是它可能会变得非常混乱......不得不逃避所有的“或弄乱回车符。当然你可以围绕它编程,但是如果你想复制/粘贴代码怎么办?听起来像一场噩梦和工作比它的价值多得多。

于 2010-03-25T03:26:55.877 回答
0

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

或者也许更合适的是用户控件,在 aspx 页面中带有标记,在后面的代码中包含任何其他内容。

于 2010-03-25T03:31:21.107 回答
0

如果您使用这种方法,您应该将您的开发工作迁移到 ASP.Net MVC。虽然 ASP.Net 积极尝试通过使用 Web 控件来抽象 HTML、CSS、JavaScript 等,但 ASP.Net MVC 是围绕直接控制标记本身的范式构建的(尽管这可能是两者之间最小的差异)两者——你绝对应该阅读它至少知道替代方案,即使你从长远来看坚持使用 ASP.Net)。

否则,如果做得好,你正在做的事情(尽管你将在整个过程中与框架作斗争),但我建议使用StringWriter代替。它在内部使用 StringBuilder,因此两者的性能特征相同,但语义与 .Net 框架的其余部分(例如,Write vs. Append)更加一致。

于 2010-03-25T03:31:32.683 回答
0

我认为这种方法有点违背网络表单试图完成的目的(分离标记和代码)。

于 2010-03-25T03:40:00.270 回答
0

我知道这个线程有点旧并且得到了很好的回答,我只是想我会“附加”(双关语)我的答案,因为我正在使用问题中提到的代码。

所有标记都在 C# 类中,他们创建了一个 StringBuilder 对象来附加所有 html 和 JavaScript 字符串。这使得阅读代码并查看发生了什么变得非常困难,如果他们想更改前端的标记/设计怎么办?现在,我手头的工作很重,必须进入并重构类中的所有标记,而更改 .aspx 页面并将数据模型连接到这些页面会容易得多。

以我的拙见,我找不到在你的类/代码中放置任何标记的充分理由。它们仅用于逻辑。另外,它使测试和调试 Javascript 变得困难。那是我的两分钱。K。

于 2017-10-04T18:56:00.327 回答