2010-08-24 4 views
2

J'utilise ListView avec un ObjectDataSource lié à un objet métier. Cet objet est défini comme suit:DataKeyNames dans les contrôles de base de données doit être une propriété?

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

Lorsque je tente de définir la propriété DataKeyNames de ListView à Id, ASP.net explose et dit:

DataBinding: « employé » ne contient pas une propriété avec le nom 'Id'.

Cependant, quand je change l'objet que:

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

Il fonctionne !!!

Je n'ai trouvé aucune documentation sur ce comportement. Pourquoi n'accepte-t-il pas une variable simple pour DataKeyNames et insiste-t-il plutôt sur une propriété?

Répondre

1

Il n'y a pas vraiment de longue explication pour celui-ci, vous l'avez déjà trouvé. ASP.Net peut lier aux propriétés et non aux variables publiques. Ceci est probablement lié à la façon dont le MSIL est généré. Une fois compilée, une propriété est générée en tant que méthode (et la liaison vous permet de lier des méthodes et des propriétés) alors que les variables publiques ne le sont pas.

Malheureusement une recherche rapide n'a pas découvert le raisonnement au-delà de ma propre estimation ci-dessus, mais voici MS dire « propriétés, expressions, méthodes » aussi: http://support.microsoft.com/kb/307860

+3

Merci de confirmer ma pensée. Je pense qu'il est étrange d'empêcher les variables de servir de DataKeyNames, mais tel est le monde de Microsoft. – md1337

Questions connexes