簡體   English   中英

如何自定義WebViewPage執行輸出?

[英]How to customize WebViewPage executation output?

我將在Asp.Net MVC應用程序的每個視圖中注入一些元素。 這樣做(我發現了這一點: 在剃刀模板呈現答案時,自定義WebViewPage注入代碼 )我將WebViewPage子類化,並且覆蓋了ExecutePageHierarchy如下所示:

   public override void ExecutePageHierarchy()
    {
        base.ExecutePageHierarchy();
        string output = Output.ToString();
        if (MyHelper.InitializationRequired)
            output = MyHelper.GetPageHeader() + output + MyHelper.GetPageFooter();
        //--------------
        Response.Clear();
        Response.Write(output);
        Response.End();
    }

通過此代碼,我們可以用一些頁眉和頁腳元素(例如腳本或我想要這樣做的其他標簽)包裝所有輸出標記。

但是這樣我們就完全失去了Layout 因為清除了響應。

我的主要問題是, 如何通過保留響應的內容(可能還有其他視圖或布局) WebViewPage的輸出之前或之后注入一些HTML標記

您應該使用MVC的布局系統...具有主布局模式的完整功能:=)

最終,我找到了一種通過這種方式完成此操作的技巧:

 public override void ExecutePageHierarchy()
    {
        var tmp = OutputStack.Pop();
        var myWriter = new StringWriter();
        OutputStack.Push(myWriter);
        base.ExecutePageHierarchy();

        tmp.Write(
            string.Format("<div> Header of [{0}]</div> {1} <div> Footer of [{0}]</div>",
            VirtualPath,
            myWriter.ToString()));
    }

它通常工作良好,並且按頁眉和頁腳包裝視圖的輸出。 但是在我的場景中,我應該能夠訪問將在執行視圖時分配的一些標志。 所以我必須在查看執行后檢查它們:

 public override void ExecutePageHierarchy()
    {
        var tmp = OutputStack.Pop();
        var myWriter = new StringWriter();
        OutputStack.Push(myWriter);
        base.ExecutePageHierarchy();
        if (MyHelper.InitializationRequired)
           tmp.Write(
            string.Format("<div> Header of [{0}]</div> {1} <div> Footer of [{0}]</div>",
            VirtualPath,
            myWriter.ToString()));
        else
           tmp.Write(myWriter.ToString());
    }

這種方法對我來說很好。 所以我發布了它,也許可以幫助一個;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM