【问题标题】:Controlling Output Indentation in ASP.Net MVC在 ASP.Net MVC 中控制输出缩进
【发布时间】:2010-12-08 06:16:39
【问题描述】:

我的同事对将正确格式化和缩进的 html 交付给客户端浏览器非常“热情”。这是为了便于人类阅读页面源代码。

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

其次,我的同事创建了许多用于写入响应的 HtmlHelper 扩展方法。这些都需要将 CurrentIndent 参数传递给它们。我觉得这味道不对。

有人可以帮忙吗?

【问题讨论】:

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


    【解决方案1】:

    浏览器绝对不在乎 HTML 缩进有多漂亮。更重要的是,深度嵌套(因此严重缩进)HTML 给页面增加了一点开销(就下载字节而言)。当然,您始终可以压缩响应,并且更好地支持缩进的 HTML。

    【讨论】:

    • 你是否建议 html 不应该缩进呢?
    • 对。在这种情况下,部分视图是一个单独的实体,因为您维护的是开发部分(aspx/ascx 文件),而不是最终生成的交付给客户端的 HTML。缩进应该只与单个文件相关,而不是结束响应。
    【解决方案2】:

    即使出于某种疯狂的原因必须“正确”缩进,也不应按照您同事的建议进行。

    附加到HttpApplication 对象的ReleaseRequestState 事件的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】:

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

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

      【讨论】:

      • Firebug 中显示的 HTML 不是源 HTML。它是 DOM 的反映。对 Firefox 没有意义的源不会被添加到 DOM 中,也不会出现在 Firebug 的显示中。
      • 同意,但对于大多数用途来说,它可能已经足够接近了。除非您可能特别需要查看实际呈现的源代码,例如,如果试图追踪一些格式错误的标记,或者在脚本更新 DOM 之前查看原始 HTML。
      • 整洁+1。后处理是正确的方法;源代码应在开发时进行格式化,而不是在客户端渲染时进行格式化。让一个工具为客户很好地呈现它。
      【解决方案4】:

      与其浪费时间实施会影响所有 HTTP 请求(从而增加 CPU 和带宽开销)的适当缩进解决方案,不如建议您的同事使用 HTML 美化器。这样一来,关心它的人就是为此付出代价的人。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-08
        • 1970-01-01
        • 1970-01-01
        • 2019-10-24
        • 2011-01-07
        • 1970-01-01
        相关资源
        最近更新 更多