2010-08-24 29 views
2

我使用一个ListView以及与业务对象绑定的ObjectDataSource。该对象被定义如下:数据绑定控件中的DataKeyNames必须是属性?

public class Employee 
{ 
    public int Id; 
    public string Name; 
} 

当我尝试设置的ListView来标识的DataKeyNames属性,ASP.net炸毁,并说:

数据绑定:“雇员”不包含财产名称为“Id”。

但是,当我改变的对象是:

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

它的工作原理!

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

回答

1

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

不幸的是,快速搜索并没有发现推理超出了我自己的猜测以上,但这里是MS说“性质,表情,方法”也:http://support.microsoft.com/kb/307860

+3

感谢确认我的想法。我认为防止变量作为DataKeyNames是很奇怪的,但这是微软的世界。 – md1337 2010-09-03 17:01:05

相关问题