'myObject'不包含名称为'ID'的属性(不是拼写错误)

Chr*_*ris 8 c# asp.net

我正在构建一个ASP.NET C#网站,我有一个下拉列表,我绑定到我创建的对象列表.绑定下拉列表的代码如下所示:

protected void PopulateDropdownWithObjects(DropDownList dropdownlist, List<myObject>() myObjects)
{
    dropdownlist.DataValueField = "ID";
    dropdownlist.DataTextField = "Name";
    dropdownlist.DataSource = myObjects;  // my code fails here
    dropdownlist.DataBind();
}
Run Code Online (Sandbox Code Playgroud)

但是,当它遇到方法中的第3行时,会抛出异常:

DataBinding: 'myObject' does not contain a property with the name 'ID'.
Run Code Online (Sandbox Code Playgroud)

但是,我可以在调试时清楚地看到myObject.ID值:我可以在立即窗口中访问它,它是公共的,它不是空的,我拼写正确并且使用正确的大小写:

public class myObject
{
    public int ID;   // see? "ID" is right here!
    public string Name;

    public myObject(
        int id,
        string name
        )
    {
        this.ID = id;
        this.Name = name;
    }
}
Run Code Online (Sandbox Code Playgroud)

还有什么可以导致此错误吗?

Chr*_*ris 36

您的代码不起作用,因为它ID是一个字段,而不是一个属性.

如果您更改了类,如下所示,代码将按预期工作:

public class myObject
{
    public int ID    // this is now a property
    {
        get;
        set;
    }

    public string Name
    {
        get;
        set;
    }

    public myObject(
        int id,
        string name
        )
    {
        this.ID = id;
        this.Name = name;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 你是第二个人在跟自己说话吗? (25认同)
  • 潜行者。我的答案使用“您”而不是“一个”。该答案不以这种方式使用“您”。通常,回答他/她自己的问题的用户将以某种方式确认它。 (2认同)
  • 经常在我的头上敲了几天之后[我会立即回答一个问题](http://stackoverflow.com/questions/11346554/can-i-use-extension-methods-and-linq-in- net-2-0-or-3-0/11346555#11346555)只是为了阻止其他人可能和我一样经历同样的问题(但我同意他应该首先检查一下). (2认同)