如何在View渲染时捕获使用块内的内容

时间:2012-05-05 10:32:52

标签: asp.net-mvc

我正在使用ASP.NET MVC 3.0和ASPX View Engine。

我目前有一种方法,它使用正则表达式匹配文本中的某些单词并相应地突出显示它们。到目前为止,我正在使用它来处理从平面文件中读取的大量文本。我在这篇文章中试图实现的最终目标是能够捕获视图的内容部分,并使用相同的方法处理它们。

以下是我目前正在尝试实现此目标的基本示例:

<h2>This is a Test</h2>

<p>Line before capture</p>

<% using (Html.CaptureContent())
   { %>

<p>this line should be in capitals</p>

 <%} %>
<p>Line after capture</p>

Html.CaptureContent:

public static ContentCapture CaptureContent(this HtmlHelper html)
{
    return new ContentCapture(html.ViewContext.HttpContext);
}

ContentCapture:

public class ContentCapture : IDisposable
{
    private HttpContextBase Context { get; set; }
    private TextWriter OriginalOutput { get; set; }
    private StringWriter CaptureOutput { get; set; }

    public ContentCapture(HttpContextBase context)
    {

        CaptureOutput = new StringWriter();

        //save the default writer in private property
        OriginalOutput = context.Response.Output;
        Context = context;

        Context.Response.Output = CaptureOutput;
    }

    public void Dispose()
    {
        string processedContent = CaptureOutput.ToString().ToUpper();

        Context.Response.Output = OriginalOutput;
        Context.Response.Output.Write(processedContent);
    }
}

当我运行此输出时,输出与视图中的标签完全相同,未对&lt; p&gt;执行任何处理。使用块内的标记。我尝试了几种变化但没有成功。我猜我在如何呈现View时做出了错误的假设,因为在dispose方法中放置断点已经向我显示没有任何内容写入StringWriter对象。

有谁知道我能达到预期效果的方法?我宁愿不要求帮助者返回硬编码字符串中的所有内容部分。

1 个答案:

答案 0 :(得分:0)

您需要像这样写入ViewContext:

htmlHelper.ViewContext.Writer.Write("some content");

所以你必须做一些重构才能使用它而不是你当前正在经历的HttpContext。