MVC 用のカスタム HtmlHelper を作成しています。ヘルパーで使用される HTML のブロックをユーザーが追加できるようにしたいと思います。だから、私は私の見解では次のようなものを持つことを計画しています:
@using (Html.MyHelper())
{
// foo
}
MyHelper ヘルパー メソッドは、次のように定義されます。
public static MyHelperWriter MyHelper(this HtmlHelper helper)
{
helper.ViewContext.Writer.Write(@"<span>");
return new MyHelperWriter(helper.ViewContext.Writer);
}
public class MyHelperWriter : IDisposable
{
private bool disposed;
public TextWriter Writer { get; set; }
public MyHelperWriter(TextWriter writer)
{
/// TODO: Modify the TextWriter stream
Writer = writer;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
this.disposed = true;
Writer.Write(@"</span>");
}
}
}
私がやりたいのは、TextWriter ストリームを更新してそれをキャプチャし、コンテンツに対して何かを行うことです。ストリームをフラッシュできることはわかっていますが、動作をオーバーライドしたい場合があります。
これができない場合 (そして厄介なように思われる場合)、これと同じことを達成するためのより良い方法はありますか?