创建HTMLControls而不是输出HTML字符串

时间:2008-12-10 17:02:32

标签: asp.net vb.net htmlcontrols

我最近试图向程序员解释为什么在ASP.Net中他们应该创建HTMLControl而不是创建HTML字符串来创建网页。

我知道这是一种更好的做事方式,但我真的无法给出具体的理由,除了“这种方式更好。”

如果你不得不回答这个问题,你的回答是什么?

为什么

Dim divA as New HtmlControls.HtmlGenericControl("div") 
Dim ulList1 as New HtmlControls.HtmlGenericControl("ul") 
Dim liObj1, liObj2, liObj3 as New HtmlControls.HtmlGenericControl("li") 
liObj1.innerText = "List item 1" 
liObj2.innerText = "List item 2"
liObj3.innerText = "List item 3"
ulList1.Controls.Add(liObj1)
ulList1.Controls.Add(liObj2)
ulList1.Controls.add(liObj3)
divA.Controls.add(ulList1)

比“更好”:

Dim strHTML as String
strHTML = "<div><ul><li>List item 1</li><li>List item 2</li><li>List item 3</li></ul></div>"

?它看起来不太好。看看所有代码!而且,这是一个非常简单的例子,以节省空间。我不认为我会像这样手动创建列表,但会迭代一个集合或使用更高级的Web控件,但我试图说明一点。

7 个答案:

答案 0 :(得分:2)

我也没有。相反,我:

  1. 创建一个封装所需构造的自定义控件
  2. 或(非常相似)使用我想要的属性创建一个简单的类,并覆盖.ToString()方法以创建所需的HTML。
  3. 但是在你的两个选择中,前者更好的原因有两个:

    • 您可以在页面生命周期的后续点更改html控件的属性或向树中添加其他控件
    • ASP.Net负责呈现html。您保证不会有任何可能违反xhtml合规性的错误。

答案 1 :(得分:2)

一个很大的优势:将HTML作为字符串编写非常容易出现人为错误,并且有可能很快变得难以理解和无法管理。

生成的HTML将受到更好的人类保护,并且是自我记录的。

(对于记录我鄙视两种方法,并使用XSLT进行模板化)

答案 2 :(得分:1)

您可能更喜欢大多数现代Web开发框架提供的模板系统。我不确定ASP可用的选项,但必须有一些。使用模板系统可以避免在代码中放置任何标记或编写详细的文档构造块,就像您在问题中提供的两个示例一样。

尝试使用Google搜索“asp.net模板模板”来开始一个地方。如果有一个像asp.net这样的页面,那就太好了。如果您找到一个,请告诉我们:

http://wiki.python.org/moin/Templating

答案 3 :(得分:0)

就个人而言,我只会创建控件,如果我不得不因为很多微软的HTML只能在怪癖模式下工作,我同意创建HTML字符串非常容易出错。

我使用XML解析器创建XHTML,然后从XMLDocument对象中获取.toString。它很详细,但输出始终格式正确,并始终有效。

答案 4 :(得分:0)

好处是ASP.NET生成的代码在不同条件下呈现的方式不同。浏览器版本,软件更新/补丁,趋势,附加框架等。当您自己编写HTML并将其转储到屏幕时,它永远不会改变。这将永远是你写的。

但是,如果使用.NET Objects(推荐方式)添加它,则在运行时期间会创建在最终用户浏览器中呈现的实际代码。这是一个很好的例子,它使用“CSS控件适配器工具包用于ASP.NET 2.0”,它改变了.NET控件的渲染方式,更改了默认方法以渲染控件以使用纯CSS。

答案 5 :(得分:0)

在两种情况下,它真的更好:

  1. 您需要对代码中的控件执行某些操作
  2. 由此产生的手动HTML非常混乱,以字符串形式维护是不切实际的。
  3. 从代码的角度来看,两者都不是更好的解决方案。就显示而言,它们都能完美地工作。

答案 6 :(得分:-1)

像你一样构建控件是关于ASP.NET的单一最糟糕的事情。使用Partial的MVC或方法是构建HTML的更好(更容易维护)的方法。