2010-08-14 9 views
1

Je me demandais pourquoi je reçois erreur de compilation de temps: «L'attribut « DisplayColumn » est pas valable sur ce type de déclaration n'est valable sur les déclarations « de classe ». »L'attribut 'DisplayColumn' n'est pas valide pour ce type de déclaration. Il est valable uniquement sur les déclarations « de classe »

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.ComponentModel.DataAnnotations; 

namespace MyApplication.Models.DataAnnotations 
{ 

    [MetadataType(typeof(AppUser_DataAnnotations))] 
    public partial class AppUser 
    { 

    } 

    public class AppUser_DataAnnotations 
    { 
     [DisplayColumn("Name")] 
     public string FirstName { get; set; } 
    } 
} 

J'utilise ci-dessus pour remplacer les en-têtes de colonnes de la grille de rendu MvcContrib. Une idée de pourquoi je reçois erreur de compilation? Toute aide serait grandement appréciée.

Répondre

2

La raison pour laquelle vous obtenez une erreur de compilation est que l'attribut [DisplayColumn] ne peut être appliqué qu'au niveau de la classe et non à une propriété de la classe. Vous confondez probablement cet attribut avec [DisplayName].

+0

Ohhh mon mauvais. Bonne prise merci! Mais je ne trouve [DisplayName] nulle part. Est-ce que je manque un espace de noms? Merci. – Gurdeep

+0

Trouvé ... en utilisant System.ComponentModel; c'est ce qui manquait. Pourtant, je ne reçois pas l'en-tête overriden. – Gurdeep

4

Pour les personnes qui se jettent dans ce problème à l'avenir peut-être cela peut aider:

j'ai eu le même problème que décrit ci-dessus. Comme décrit dans les autres réponses, il est important d'utiliser la propriété DisplayName et d'inclure l'espace de noms System.ComponentModel. De plus, la propriété doit avoir un getter (et un setter) pour que l'attribut fonctionne. L'erreur est un peu déroutant sur celui-ci.