如何自定义 WebViewPage 执行输出?
How to customize WebViewPage executation output?
我将在 Asp.Net MVC 应用程序的每个视图中注入一些元素。所以这样做(我发现了这个: 答案)我已经将 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());
}
这种方法对我很有效。所以我发布了它,也许对某些人有帮助;)
我将在 Asp.Net MVC 应用程序的每个视图中注入一些元素。所以这样做(我发现了这个: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());
}
这种方法对我很有效。所以我发布了它,也许对某些人有帮助;)