I'm writing my first asp.net mvc application and I have a question about custom Html helpers:
For making a form, you can use:
<% using (Html.BeginForm()) {%>
*stuff here*
<% } %>
I would like to do something similar with a custom HTML helper. In other words, I want to change:
Html.BeginTr();
Html.Td(day.Description);
Html.EndTr();
into:
using Html.BeginTr(){
Html.Td(day.Description);
}
Is this possible?
Here is a possible reusable implementation in c# :
class DisposableHelper : IDisposable
{
private Action end;
// When the object is created, write "begin" function
public DisposableHelper(Action begin, Action end)
{
this.end = end;
begin();
}
// When the object is disposed (end of using block), write "end" function
public void Dispose()
{
end();
}
}
public static class DisposableExtensions
{
public static IDisposable DisposableTr(this HtmlHelper htmlHelper)
{
return new DisposableHelper(
() => htmlHelper.BeginTr(),
() => htmlHelper.EndTr()
);
}
}
In this case, BeginTr
and EndTr
directly write in the response stream. If you use extension methods that return a string, you'll have to output them using :
htmlHelper.ViewContext.HttpContext.Response.Write(s)