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?
Creating HTML Helpers with Static MethodsThe easiest way to create a new HTML Helper is to create a static method that returns a string. Imagine, for example, that you decide to create a new HTML Helper that renders an HTML <label> tag. You can use the class in Listing 2 to render a <label> .
HTML Custom Helpers HTML helper is a method that returns a HTML string. Then this string is rendered in view. MVC provides many HTML helper methods. It also provides facility to create your own HTML helper methods. Once you create your helper method you can reuse it many times.
To create a custom HTML helper you have create a static class and static method. below example is for a custom HTML helper for submit button. Make sure you add below using statements. Now, You can now use it on the page where you want to define a button.
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With