« Voltar
em .net c# ASP.NET MVC 5

Criando HTML helpers customizados.

O Html Helper do ASP.NET MVC é muito útil, não é?
Eu particulamente gosto dele.

Mas às vezes precisamos de mais. Precisamos de algo diferente.
Vou te mostrar duas formas de fazer um Helper customizado.

Criando seu próprio Helper

Vamos criar uma classe para um input customizado chamada CustomInput e criar o método Input dentro dela:

namespace MeuSistema.Helpers  
{
    public class CustomInput
    {
         public static MvcHtmlString Input(string name, string value)
          {
              return MvcHtmlString.Create (String.Format("<input  name='{0}' value='{1}' id='{0}' type=”text” />", name, value));                   
          }
    }
}

Veja só: uma classe dentro de um namespace que eu criei(que pode ser qualquer um) e que tem um método estático.

Nada de mais, né?

Agora, vamos importar o namespace dessa classe dentro daquele web.config que fica dentro da pasta views:

<system.web.webPages.razor>  
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        //outras configs
        <add namespace="MeuSistema.Helpers" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

Se você não sabe pra que serve o *web.config que fica dentro dessa pasta, escrevi um artigo sobre isso um tempo atrás*.

Agora, pra usar o Helper que você criou basta chamá-lo assim:

@CustomInput.Input("nome", "valor")

Criando um Extension Method

Você pode também "adicionar" um método ao Html Helper padrão usando um Extension Method.

Pra isso, criamos uma classe:

namespace MeuSistema.Helpers  
{
    public static class CustomInput
    {
         public static MvcHtmlString InputCustomizado(this HtmlHelper helper, string name, string value)
          {
              return MvcHtmlString.Create (String.Format("<input  name='{0}' value='{1}' id='{0}' type=”text” />", name, value));                   
          }
    }
}

Muito parecida com a anterior, certo?

Mas tem algo diferente ali no método. Estamos criando um Extension Method da classe HtmlHelper (:
Para esse caso, a classe tem que ser estática.

Da mesma forma que fizemos no outro, importamos o namespace dentro do web.config:

<system.web.webPages.razor>  
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        //outras configs
        <add namespace="MeuSistema.Helpers" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

Agora, na hora de usar fazemos:

@Html.InputCustomizado("nome", "valor")

Usamos como se fosse um método do Html Helper padrão.

Legal, né? (:


Quer ganhar 15% de desconto pra gastar na Casa do Código e ainda ficar em dia com as minhas postagem e outras promoções e sorteios legais? Assina minha newsletter: http://gabsferreira.com/newsletter/ (:

Se quiser, curta minha página no Face também! O endereço é https://www.facebook.com/devgabsferreira

comments powered by Disqus