Hi Guys
I'm not really familiar with creating generic methods, so I thought I'd put this question to the community & see what comes back. It might not even be a valid use of generics!
I'd like to create a HtmlHelper extension method where I can specify that the method is of a certain type. I pass into the method an instance of that type, and an instance of a TagBuilder object. I then specify the class attribute of the tag to be the type of object I passed in, with all the object's properties serialized into the tag's attributes.
edit... the benefit of this would be that I could then easily serialize my Html elements in into javascript objects for jQuerying to the server & Model Binding, as well as the ability to specify style for a type ...end edit
This code sample might clarify.
I have a type like this:
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;
}
}
What I'm thinking is to produce a helper method, maybe with a signature similar to this:
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.
}
Ideally I could then call:
<% var myType = new MyType(123, 234); %>
<% var tag = new TagBuilder("div"); %>
<%= Html.GetTag<MyType>(myType, tag) %>
and the html produced would be
<div class="MyType" prop1="123" prop2="234" />
And later on, I can call
<%= Html.GetTag<MyOtherType>(myOtherType, tag) %>
to get
<div class="MyOtherType" prop1="123" prop2="234" />
Is it even possible? Or am I looking at this totally the wrong way? Anyone care to fill me on on a better approach?
Thanks
Dave