Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Custom html helpers: Create helper with "using" statement support

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?

like image 421
Thomas Stock Avatar asked Mar 24 '09 10:03

Thomas Stock


People also ask

Can we create custom HTML helper?

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> .

What is custom HTML helper?

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.

How can create custom HTML helper in asp net core?

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.


1 Answers

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) 
like image 194
ybo Avatar answered Sep 29 '22 20:09

ybo