控制ASP.Net MVC中的输出缩进

时间:2009-10-20 07:55:04

标签: html asp.net-mvc extension-methods indentation html-helper

我的同事在正确格式化和缩进的html传送到客户端浏览器时非常“热”。这样,页面源很容易被人阅读。

首先,如果我的网站中有许多不同区域使用的局部视图,渲染引擎是否应该为我自动格式化缩进(ala在XmlTextWriter上设置Formatting属性)?

其次,我的同事已经创建了许多用于写入响应的HtmlHelper扩展方法。这些都需要将CurrentIndent参数传递给它们。这对我来说有点不对劲。

任何人都可以帮忙吗?

4 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:3)

浏览器绝对不关心HTML缩进的美妙程度。更重要的是,深度嵌套(因此大量缩进)HTML会给页面带来轻微的开销(以下载的字节数计)。当然,您可以随时压缩响应,并且良好缩进的HTML可以更好地支持。

答案 2 :(得分: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)
    }
}

答案 3 :(得分:2)

不要浪费时间来实现一个影响所有HTTP请求的合适的缩进解决方案(从而增加CPU和带宽开销),而是向同事建议他使用HTML美化器。这样一个关心它的人就是那个付出代价的人。

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