Comment masquer Entity Framework propriétés d'entité d'fortement typé point de vue?
Je suis en utilisant Entity Framework dans mon ASP.NET MVC 4.0 application et je veux savoir comment prévenir ou masquer les champs de mon entité d'être générés dans ma fortement typé vue? Droit maintenant plusieurs champs de clé primaire et de champs d'horodatage sont générés sur le point de vue que je ne veux pas.
Je sais définition de la propriété à internal
par opposition à public
fonctionne, mais je ne suis pas sûr du total de l'effet en aval de cette aura. Je préfère utiliser des annotations de données sur les propriétés mais ceux que j'ai essayé de prévenir le Contrôleur d'échafaudages ou de faire comme les champs cachés. Je préfère qu'ils restent public, mais juste ne pas être générées dans la vue fortement typée.
EDIT:
Pour générer une Vue fortement typée, ajouter une nouvelle " Vue " dans Visual Studio et sélectionnez la classe dans la boîte de dialogue à laquelle la vue est modélisé d'après. Ce à son tour, permettra de créer une vue avec tous les contrôles qui sont représentées par les propriétés de la classe. Par exemple, un LastName
champ est créé comme ci-dessous:
@Html.EditorFor(model => model.FirstName)
Découvrez mon "Modifier" notes s'il vous plaît.
Quoi?? Vous pouvez tout à fait créer un typage fort Affichage (ne parlons pas des Contrôleurs ici juste pour être clair) à partir d'une classe d'Entité. La Vue contient tous les contrôles modélisé comme je l'ai exposé ci-dessus via le code généré automatiquement.
Miss lu quelque chose, désolé. Lire ma réponse.
OriginalL'auteur atconway | 2012-08-14
Vous devez vous connecter pour publier un commentaire.
Réponse à la question
Attribut
ou
avant l'indésirables les propriétés de l'empêcher de designer pour générer des échafaudages champs de ces propriétés.
[Display(AutoGenerateField=false)]
et il a encore généré le champs. J'ai lu la documentation MSDN sur cette annotation et semble exact, mais il est toujours génératrice de ces champs dans la vue. Voir mon commentaire sur l'autre réponse en ce qui concerne[ScaffoldColumn(false)]
Et voir la réponse à votre commentaire que j'ai écrit.......
Honnêtement, je ne suis pas à ce point. Je vois certains vraiment tordu de comportement avec les VS.NET 2010 et la création de ces points de vue fortement typée. Je ne suis pas sûr si il ya certains de la mise en cache ou quoi. J'ai toujours assurez-vous de reconstruire la solution avant de supprimer et de recréer la vue fortement typée après modification des annotations. I
[ScaffoldColumn(false)]
est un travail, mais parfois, les champs sont toujours générée dans la Vue et parfois ils ne le font pas (que j'attends). J'ai redémarré VS.NET et la 1ère Vue, j'ai créé a fonctionné parfaitement avec l'annotation.Ici semble être la bonne combinaison. 1. Ajouter l'annotation sur la Propriété:
[ScaffoldColumn(false)]
2. Supprimer l'généré Vue qui est incorrect avec de trop nombreux domaines. 3. Construire la Solution 4. Ajoutez -> Afficher, sélectionnez "Fortement typé" et sélectionnez la classe, avec les annotations. Les champs avec[ScaffoldColumn(false)]
devrait pas apparaître.Oh oui. L'échafaudage des mises à jour sur la compilation. Chaque fois que vous touchez votre modèle, vous devez compiler pour garder votre échafaudage dans la synchronisation. Désolé, j'aurais dû en parler.
OriginalL'auteur Pluc
Pour masquer une propriété à partir de l'INTERFACE utilisateur via les Annotations de Données, de décorer la propriété avec
et ils seront ignorés par l'éditeur de modèles.
DisplayForModel
ouEditorForModel
aides sont utilisés. Cette annotation ne fonctionne pas avec les Aides qui sont générés automatiquement par fortement typé Vues VS.NET.Vous êtes dans l'erreur. ScaffoldColumn attribut fonctionne pour généré automatiquement fortement typé points de vue, CEPENDANT, puisque vous êtes en utilisant Entity Framework, vous devez ajouter l'attribut à l'intérieur du modèle de concepteur de code (qui n'est vraiment pas recommandé). Malheureusement, l'attribut ne fonctionne pas "Out of the box" sans l'appliquer directement sur l'entité. La réponse est donc "Il doit être fait à la main", à moins que vous écrivez votre propre ScaffoldColumn attribut, si c'est encore possible. (Sauf si il y a une case caché quelque part dans le concepteur que j'ai raté)
Je dois ajouter les annotations directement généré entité code de concepteur. Je veux être clair, je suis d'accord avec tous le sentiment d'utiliser Viewmodel, mais c'était un cas spécial, par exemple je suis en train de faire. Donc pourquoi je suis en train de travailler directement avec les entités.
OriginalL'auteur Forty-Two
Vous devez utiliser des classes ViewModel qui ne contiennent que les propriétés que vous souhaitez.
Je suis confus. Si vous utilisez un ViewModel qui n'a que des propriétés requises pour le point de vue spécifique, quelles sont les autres propriétés là-bas?
Désolé, il fallait lire oui, je suis en utilisant des ViewModels dans la plupart de mes projets Ce projet, je ne suis pas comme il est un exemple / harnais de test et de ne pas utiliser le Viewmodel. Pour ce cas particulier, Viewmodel qui sont autour de plus d'une réponse directe à ma question de toute façon.
J'ai trouver j'ai besoin d'utiliser la ScaffoldColumn attribut dans le viewmodel et dans les vues que je appuyer sur eux en commençant par une vue vide.
OriginalL'auteur SLaks