Использование обобщений для создания методов расширения HtmlHelper

Я не очень знаком с созданием универсальных методов, поэтому я решил задать этот вопрос сообществу и посмотреть, что получится. Это может даже не быть допустимым использованием дженериков!

Я хотел бы создать метод расширения HtmlHelper, в котором я могу указать, что этот метод имеет определенный тип. Я передаю в метод экземпляр этого типа и экземпляр объекта TagBuilder. Затем я указываю атрибут класса тега как тип объекта, который я передал, и все свойства объекта сериализуются в атрибуты тега.

редактировать... Преимущество этого состоит в том, что я мог бы легко сериализовать мои элементы Html в объекты javascript для jQuerying для сервера и привязки модели, а также возможность указать стиль для типа.... конец редактирования

Этот пример кода может прояснить.

У меня есть такой тип:

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

Я думаю о том, чтобы создать вспомогательный метод, возможно, с такой подписью:

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

В идеале я мог бы тогда позвонить:

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

и созданный HTML будет

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

И позже я могу позвонить

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

получить

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

Это вообще возможно? Или я смотрю на это совершенно неправильно? Кто-нибудь хочет, чтобы меня лучше подходило?

Спасибо

Дейв

Ответы на вопрос(2)

Ваш ответ на вопрос