Usando genéricos para criar métodos de extensão HtmlHelper
Eu realmente não estou familiarizado com a criação de métodos genéricos, então pensei em colocar essa pergunta na comunidade e ver o que volta. Pode até não ser um uso válido de genéricos!
Gostaria de criar um método de extensão HtmlHelper, onde posso especificar que o método é de um determinado tipo. Passo ao método uma instância desse tipo e uma instância de um objeto TagBuilder. Em seguida, especifico o atributo de classe da marca como o tipo de objeto que eu passei, com todas as propriedades do objeto serializadas nos atributos da marca.
editar... o benefício disso seria que eu poderia serializar facilmente meus elementos HTML em objetos javascript para jQuerying no servidor e na Model Binding, bem como a capacidade de especificar o estilo para um tipo... finalizar edição
Este exemplo de código pode esclarecer.
Eu tenho um tipo como este:
public class MyType
{
public int Prop1 { get; set; }
public int Prop2 { get; set; }
public MyType(int val1, int val2)
{
this.Prop1 = val1;
this.Prop2 = val2;
}
}
O que estou pensando é produzir um método auxiliar, talvez com uma assinatura semelhante a esta:
public static string GetTag<T>(this HtmlHelper h, object myType, TagBuilder tag)
{
// cast myType to T //(i.e. MyType)
// use reflection to get the properties in MyType
// get values corresponding to the properties
// build up tag's attribute/value pairs with properties.
}
Idealmente, eu poderia ligar para:
<% var myType = new MyType(123, 234); %>
<% var tag = new TagBuilder("div"); %>
<%= Html.GetTag<MyType>(myType, tag) %>
e o html produzido seria
<div class="MyType" prop1="123" prop2="234" />
E mais tarde, eu posso ligar
<%= Html.GetTag<MyOtherType>(myOtherType, tag) %>
para obter
<div class="MyOtherType" prop1="123" prop2="234" />
Isso é possível? Ou estou vendo isso totalmente da maneira errada? Alguém quer me informar sobre uma abordagem melhor?
obrigado
Dave