2

ASPX View Engine で ASP.NET MVC 3.0 を使用しています。

現在、正規表現を使用してテキスト内の特定の単語を一致させ、それに応じて強調表示する方法があります。これまでのところ、フラット ファイルから読み取られる大量のテキストを処理するためにこれを使用しています。この投稿で達成しようとしている最終目標は、View のコンテンツ セクションをキャプチャし、同じ方法でそれらを処理できるようにすることです。

これは、私が現在これを達成しようとしている方法の基本的な例です。

<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);
}

コンテンツキャプチャ:

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);
    }
}

これを実行すると、ビュー内のタグとまったく同じ出力が得られ、using ブロック内の <p> タグには処理が適用されません。いくつかのバリエーションを試しましたが、成功しませんでした。Dispose メソッドにブレークポイントを配置すると、StringWriter オブジェクトに何も書き込まれていないことがわかったため、ビューがどのようにレンダリングされるかについて誤った仮定をしたと思います。

希望の効果を達成できる方法を知っている人はいますか? ハードコーディングされた文字列のすべてのコンテンツ セクションがヘルパーによって返されるという手段に訴えたくありません。

4

1 に答える 1