如何将PropertyInfo []转换为Dictionary <string,string>?</string,string>

时间:2013-10-16 05:46:00

标签: c# asp.net-mvc-4 reflection dictionary html.dropdownlistfor

实际上我需要在mvc下拉列表中显示我的类的属性。我正在使用反射来获取这些东西。但现在我的问题是将它们作为键值对在dropdownlist中显示它们。

我正在使用以下代码......

public static Dictionary<string,string> SetProperties()
    {
        Type T = Type.GetType("Entity.Data.Contact");
        PropertyInfo[] resultcontactproperties = T.GetProperties();

        ViewContactModel viewobj = new ViewContactModel();
        viewobj.properties = resultcontactproperties;
        Dictionary<string, string> dic = new Dictionary<string, string>();
        return dic;
    }

那么如何将它们转换为字典以在下面的下拉列表中获取它们??

  @Html.DropDownListFor(m=>m.properties, new SelectList(Entity.Data.ContactManager.SetProperties(),"",""), "Select a Property")

Well this is my ViewContactModel

public class ViewContactModel
    {

        public List<Entity.Data.Contact> Contacts;
        public int NoOfContacts { get; set; }
        public Paging pagingmodel { get; set; }
        public PropertyInfo[] properties { get; set; }
    }

In the view I'm using this model 

1 个答案:

答案 0 :(得分:1)

如果必须使用Dictionary并假设每个下拉项的名称和值都是属性名称本身,则可以使用以下行中的内容:

    public static Dictionary<string, string> GetProperties<T>(params string[] propNames)
    {
        PropertyInfo[] resultcontactproperties  = null;
        if(propNames.Length > 0)
        {
            resultcontactproperties = typeof(T).GetProperties().Where(p => propNames.Contains(p.Name)).ToArray();
        }
        else
        {
            resultcontactproperties = typeof(T).GetProperties();
        }
        var dict = resultcontactproperties.ToDictionary(propInfo => propInfo.Name, propInfo => propInfo.Name);
        return dict;
    }  

 @Html.DropDownListFor(m=>m.properties, new SelectList(
 Entity.Data.ContactManager.GetProperties<Contact>(),"Key","Value"), 
 "Select a Property")