我正在为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流以捕获它并对内容执行某些操作。我知道我可以刷新流,但我可能想要覆盖行为。
如果这不能做(而且看起来很蠢),有没有更好的方法来完成同样的事情?