2009-10-20 117 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