我正在使用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对象。
有谁知道我能达到预期效果的方法?我宁愿不要求帮助者返回硬编码字符串中的所有内容部分。
答案 0 :(得分:0)
您需要像这样写入ViewContext:
htmlHelper.ViewContext.Writer.Write("some content");
所以你必须做一些重构才能使用它而不是你当前正在经历的HttpContext。