2009-11-24 10 views
0

La question est dans le titre, en fait - disons que j'ai une classe simple comme ceci:
Si une propriété ou un champ est exclu lors de la liaison au modèle, quelle valeur aura-t-il?

public class Product { 
    public Int32 ID { get; set; } 
    public String Name { get; set; } 
    //... 
} 

Quand je l'utilise dans la méthode d'action, comme ceci:

public ViewResult DoSomething([Bind(Exclude="ID")]Product product] { 
//... 
} 

quelle valeur product.ID avez-vous dans cette méthode d'action? Peut-être que ce sera la valeur par défaut pour Int32? Et null dans le cas ID est de type de référence? Je suis juste intéressé, je ne l'ai pas trouvé sur le web.

+0

Avez-vous essayé de le tester vous-même? – bzlm

Répondre

1

Comme il n'y aura pas d'initialisation du tout, la propriété aura sa valeur par défaut.

+0

et s'il est initialisé mais exclu de la liaison de modèle avec Exclure? – chester89

+0

La liaison n'étant pas autorisée pour les propriétés de la liste Exclude, le DefaultModelBinder ne tentera pas de les lier. Ils n'affecteront pas le ModelState non plus. – bzlm

0

Le DefaultModelBinder, que vous utilisez si rien d'autre n'est spécifié, utilise en effet default(T) pour les valeurs non liées. Pour changer cela, vous pouvez modifier le comportement de liaison par paramètre dans les méthodes d'action (comme vous le faites avec le BindAttribute dans votre exemple), ou par type, par exemple. Global.asax.