Criar usando para o próprio ajudante? como o Html.BeginForm

Eu queria saber, é possível criar sua própria definição auxiliar, com um uso? como o seguinte, que cria um formulário:

using (Html.BeginForm(params)) { } 

Eu gostaria de fazer meu próprio ajudante assim. Então, um exemplo simples que eu gostaria de fazer

 using(Tablehelper.Begintable(id) { content etc } 

qual saída na minha opinião

 
content etc

Isso é possível? se sim, como?

obrigado

Claro, é possível:

 public static class HtmlExtensions { private class Table : IDisposable { private readonly TextWriter _writer; public Table(TextWriter writer) { _writer = writer; } public void Dispose() { _writer.Write(""); } } public static IDisposable BeginTable(this HtmlHelper html, string id) { var writer = html.ViewContext.Writer; writer.Write(string.Format("", id)); return new Table(writer); } }

e depois:

 @using(Html.BeginTable("abc")) { @:content etc } 

irá produzir:

 
content etc

Eu também recomendo que você leia sobre Delegados de Navalha Templated .

Sim; no entanto, para usar o Tablehelper.* você precisaria criar uma subclass na visão base e adicionar uma propriedade Tablehelper . Provavelmente, é mais fácil adicionar um método de extensão ao HtmlHelper :

 public static SomeType BeginTable(this HtmlHelper html, string id) { ... } 

que permitirá que você escreva:

 using (Html.BeginTable(id)) { ... } 

mas isso, por sua vez, requer vários outros bits de encanamento (para iniciar o elemento em BeginTable e BeginTable lo em Dispose() no valor retornado).