Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将PropertyInfo[]转换为Dictionary<;字符串,字符串>;?_C#_Asp.net Mvc 4_Reflection_Dictionary_Html.dropdownlistfor - Fatal编程技术网

C# 如何将PropertyInfo[]转换为Dictionary<;字符串,字符串>;?

C# 如何将PropertyInfo[]转换为Dictionary<;字符串,字符串>;?,c#,asp.net-mvc-4,reflection,dictionary,html.dropdownlistfor,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 =

实际上,我需要在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;
    }
publicstaticdictionary SetProperties()
{
Type T=Type.GetType(“Entity.Data.Contact”);
PropertyInfo[]resultcontactproperties=T.GetProperties();
ViewContactModel viewobj=新的ViewContactModel();
viewobj.properties=resultcontactproperties;
Dictionary dic=新字典();
返回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 
@Html.DropDownListFor(m=>m.properties,新选择列表(Entity.Data.ContactManager.SetProperties(),“”,“”),“选择属性”)
这是我的模型
公共类视图模型
{
公开名单联系人;
public int NoOfContacts{get;set;}
公共分页分页模型{get;set;}
公共属性info[]属性{get;set;}
}
在视图中,我正在使用此模型

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

    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")
publicstaticdictionary GetProperties(参数字符串[]propNames)
{
PropertyInfo[]resultcontactproperties=null;
如果(propNames.Length>0)
{
resultcontactproperties=typeof(T).GetProperties().Where(p=>propNames.Contains(p.Name)).ToArray();
}
其他的
{
resultcontactproperties=typeof(T).GetProperties();
}
var dict=resultcontactproperties.ToDictionary(propInfo=>propInfo.Name,propInfo=>propInfo.Name);
返回命令;
}  
@DropDownListFor(m=>m.properties,新选择列表(
Entity.Data.ContactManager.GetProperties(),“键”,“值”),
“选择一个属性”)

那么,您试图从哪个对象获取值?您有了一个新的
ViewContactModel
,但可能实际上并不包含联系人。这里没有关于从哪个联系人获取值的信息…密钥是什么,您想要的值是什么?我不想要特定的联系人。。我只在类Entity.Data.Contact中查找属性。它有名字、手机、电子邮件、州、城市、国家等属性。我想在下拉列表中显示这些属性。阿比吉特先生,你能帮我吗?答案更新。可以为所需的属性名称传入字符串数组。GetProperties(“FirstName”、“LastName”)如果需要所有属性,只需使用GetProperties()。希望这有助于您在编译时知道属性的名称,为什么需要反射?我假设他需要属性值而不是名称两次,在这种情况下是有意义的。@MattDavey:同意,如果您事先知道属性名称,那么使用反射就没有多大意义了。让GetProperties方法接受这些名称的唯一好处(我能想到)是,体验将是一致的,并且无论是否指定了属性名称,您都会得到一个字典。除非OP提供关于用例的进一步见解,否则很难判断这是否是最好的方法。只要我的2美分。。。