Uso de genéricos para crear métodos de extensión HtmlHelper
No estoy realmente familiarizado con la creación de métodos genéricos, así que pensé en hacerle esta pregunta a la comunidad y ver qué regresa. ¡Puede que ni siquiera sea un uso válido de genéricos!
Me gustaría crear un método de extensión HtmlHelper donde pueda especificar que el método es de cierto tipo. Paso al método una instancia de ese tipo y una instancia de un objeto TagBuilder. Luego especifico que el atributo de clase de la etiqueta sea el tipo de objeto que pasé, con todas las propiedades del objeto serializadas en los atributos de la etiqueta.
editar... el beneficio de esto sería que podría serializar fácilmente mis elementos Html en objetos javascript para jQuerying al servidor y Model Binding, así como la capacidad de especificar el estilo para un tipo... fin editar
Este ejemplo de código podría aclarar.
Tengo un 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;
}
}
Lo que estoy pensando es producir un método auxiliar, tal vez con una firma similar 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, podría llamar a:
<% var myType = new MyType(123, 234); %>
<% var tag = new TagBuilder("div"); %>
<%= Html.GetTag<MyType>(myType, tag) %>
y el html producido sería
<div class="MyType" prop1="123" prop2="234" />
Y luego puedo llamar
<%= Html.GetTag<MyOtherType>(myOtherType, tag) %>
Llegar
<div class="MyOtherType" prop1="123" prop2="234" />
¿Es posible? ¿O estoy mirando esto totalmente al revés? ¿A alguien le importa ponerme en contacto con un mejor enfoque?
Gracias
Dave