Я не очень знаком с созданием универсальных методов, поэтому я решил задать этот вопрос сообществу и посмотреть, что получится. Это может быть даже недопустимое использование дженериков!
Я хотел бы создать метод расширения 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" />
Возможно ли это вообще? Или я смотрю на это совершенно неправильно? Кто-нибудь хочет, чтобы меня лучше подходило?
Спасибо
Dave