2009-10-20 120 views
2

我的同事对正确格式化和缩进的html传递给客户端浏览器非常“热”。这是为了让页面源容易被人读取。首先,如果我的网站中有许多不同区域使用了局部视图,那么渲染引擎是否应该自动格式化缩进(ala在XmlTextWriter上设置Formatting属性)?其次,我的同事创建了许多用于写入响应的HtmlHelper扩展方法。这些都需要一个CurrentIndent参数传递给它们。这味道对我来说是错误的。控制ASP.Net中的输出缩进MVC

任何人都可以帮忙吗?

回答

6

这听起来很难维持。如果有人从HTML中删除了外部元素,是否有人会更新代码中的CurrentIndent值?现在大多数开发人员通常都会通过Firebug来查看他们的HTML,这会通过缩进自动对标记进行格式化。

如果您确实想通过格式化过滤器后处理HTML,请尝试.NET port of HTML Tidy

+1

Firebug中显示的HTML不是源HTML。它是DOM的反映。对Firefox没有意义的源代码不会添加到DOM中,并且不会显示在Firebug的显示中。 – 2009-10-20 08:43:02

+0

同意,但对于大多数目的而言可能已经足够接近。除非您可能特别需要查看实际呈现的源代码,例如尝试追踪某些格式不正确的标记,或者在DOM更新脚本之前查看原始HTML。 – 2009-10-20 10:00:24

+0

+1为Tidy。后处理是正确的方法;在开发时应将源代码格式化为易读性,而不是客户端渲染时间。让一个工具可以很好地为客户渲染它。 – Val 2011-03-11 06:03:45

3

浏览器绝对不在乎HTML缩进是多么美丽。更深层次的嵌入(并因此严重缩进)的HTML会给页面增加一些额外开销(以字节为单位)。当然,您可以始终压缩响应,并且支持良好的HTML格式。

+0

你是否建议html不应该缩进呢? – 2009-10-20 08:07:23

+1

没错。在这种情况下,部分视图是一个独立的实体,因为您维护开发部件(aspx/ascx文件),而不是交付给客户端的最终结果HTML。缩进应该只与个别文件有关而不是结束响应。 – 2009-10-20 08:22:19

3

即使由于一些疯狂的原因,它被缩进“适当”,它不应该按照你的同事的建议。

附加到ReleaseRequestState事件的HttpApplication对象的HttpModule应该做的伎俩。当然,你将需要拿出一个处理这个缩进的过滤器。

public class IndentingModule: IHttpModule { 

    public void Dispose() { 
    } 

    public void Init(HttpApplication context) { 
     context.ReleaseRequestState += 
      new EventHandler(context_ReleaseRequestState); 
    } 

    void context_ReleaseRequestState(object sender, EventArgs e) { 
     HttpApplication app = (HttpApplication)sender; 
     app.Response.Filter = new IndentingFilter(app.Response.Filter) 
    } 
} 
2

而不是浪费时间实施一个适当的缩进解决方案,这将影响所有HTTP请求(因此增加CPU和带宽开销),只是建议你的同事,他使用HTML美化。这样一个关心它的人就是一个人付出的代价。

This Firefox plugin是一个HTML验证程序,它还包含一个美化功能。请参阅文档here