Asp.net 数据绑定控件中的DataKeyName必须是属性?

Asp.net 数据绑定控件中的DataKeyName必须是属性?,asp.net,Asp.net,我使用ListView和绑定到业务对象的ObjectDataSource。该对象的定义如下: public class Employee { public int Id; public string Name; } 当我尝试将ListView的DataKeyNames属性设置为Id时,ASP.net会爆炸并显示: 数据绑定:“Employee”不包含名为“Id”的属性。 但是,当我将对象更改为: public class Employee { public int Id

我使用ListView和绑定到业务对象的ObjectDataSource。该对象的定义如下:

public class Employee
{
    public int Id;
    public string Name;
}
当我尝试将ListView的DataKeyNames属性设置为Id时,ASP.net会爆炸并显示:

数据绑定:“Employee”不包含名为“Id”的属性。

但是,当我将对象更改为:

public class Employee
{
    public int Id {get; set;}
    public string Name;
}
它工作


我找不到有关此行为的任何文档。为什么它不接受DataKeyName的简单变量,而是坚持一个属性?

关于这个问题没有太多的解释,您已经找到了。ASP.Net可以绑定到属性而不是公共变量。这可能与生成MSIL的方式有关。编译时,属性将作为方法生成(绑定允许您绑定到方法和属性),而公共变量则不会


不幸的是,快速搜索并没有发现超出我自己上述猜测的原因,但这是MS说的“属性、表达式、方法”:

感谢您确认我的想法。我认为阻止变量充当DataKeyName很奇怪,但这就是微软的世界。