Verwenden von Generika zum Erstellen von HtmlHelper-Erweiterungsmethoden

Ich bin nicht wirklich mit dem Erstellen generischer Methoden vertraut, daher dachte ich, ich würde diese Frage der Community stellen und sehen, was zurückkommt. Es könnte nicht einmal eine gültige Verwendung von Generika sein!

Ich möchte eine HtmlHelper-Erweiterungsmethode erstellen, bei der ich angeben kann, dass die Methode von einem bestimmten Typ ist. Ich übergebe in die Methode eine Instanz dieses Typs und eine Instanz eines TagBuilder-Objekts. Anschließend gebe ich als Klassenattribut des Tags den Objekttyp an, den ich übergeben habe, wobei alle Objekteigenschaften in die Attribute des Tags serialisiert werden.

bearbeiten... Der Vorteil davon wäre, dass ich meine HTML-Elemente dann einfach in Javascript-Objekte serialisieren könnte, um sie an den Server und die Modellbindung zu senden, sowie die Möglichkeit, den Stil für einen Typ anzugeben... die Bearbeitung beenden

Dieses Codebeispiel könnte klarstellen.

Ich habe einen Typ wie diesen:

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;
    }
}

Was ich denke ist, eine Hilfsmethode zu erstellen, vielleicht mit einer ähnlichen Signatur:

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

Idealerweise könnte ich dann anrufen:

<% var myType = new MyType(123, 234); %>
<% var tag = new TagBuilder("div"); %>
<%= Html.GetTag<MyType>(myType, tag) %>

und das erzeugte html wäre

<div class="MyType" prop1="123" prop2="234" />

Und später kann ich anrufen

<%= Html.GetTag<MyOtherType>(myOtherType, tag) %>

bekommen

<div class="MyOtherType" prop1="123" prop2="234" />

Ist es überhaupt möglich? Oder sehe ich das falsch? Möchte mich jemand über eine bessere Herangehensweise informieren?

Vielen Dank

Dave