[英]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.