使用Literal和string.Format生成干净的标记

时间:2010-06-02 14:25:26

标签: asp.net markup literals

为了生成干净的标记,我经常使用类似于此的代码:

<asp:Literal ID="ltItem" runat="server">
<li class="{0}"><a href="{1}">{2}</a></li></asp:Literal>

在代码隐藏中:

...
lt.Text = string.Format(lt.Text,
    cssClass,
    item.Url,
    Server.HtmlEncode(item.Caption)
);

一些优点是:

  • 清除html标记,没有ASP.Net WebForm id等
  • 设计人员可以在没有开发人员干预的情况下对aspx进行微小的修改
  • 代码已预编译(与使用内联代码或数据绑定语句相反)

缺点:

  • 有点神秘
  • fragile - 在标记中删除参数时,string.Format会抛出异常

因此我的问题是:

这是生成干净标记的常用方法吗?是否有更好的替代方案?数据绑定语法方法更可取吗?

2 个答案:

答案 0 :(得分:2)

您似乎正在与您的框架作斗争。 ASP.NET Web表单旨在自动解析客户端ID,并允许感觉像Windows窗体的基于属性的UI自定义。这些功能通常会使呈现的HTML变得混乱,但由于感知到的好处,结果是可以容忍的。

如果您没有意识到这些好处并且发现自己正在与ASP.NET Web表单方法作斗争,请考虑另一个框架。使用不符合您的价值观和目标的框架是没有意义的。

如果您想完全控制渲染的HTML,请考虑ASP.NET MVC。控制HTML输出是其既定目标之一。此外,它旨在强制分离关注点。

如果您对非Microsoft框架持开放态度,可以使用以下内容:

答案 1 :(得分:0)

纠正我,如果我错了,但使用MVC不会给你预编译代码不是吗? 我在使用webforms时也是如此,我遇到了几个问题。