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