2011-04-23 1 views
0

je dois dire que je suis tout à fait nouveau pour MVC et que la dernière fois que je l'ai écrit le code C# était ... il y a environ 4 ans :)Essayer de mettre à jour/créer une propriété de navigation à l'aide d'un éditeur de modèle

C'est le scénario:

"Magasins"

  • ShopID
  • Nom
  • (autres choses)
  • CityID

"Villes"

  • CityID
  • Nom
  • (autres choses)

Table "Shop" a une propriété de navigation "City"

I J'ai créé un modèle d'éditeur "City" dans mon projet MVC 3. Ce modèle utilise jQuery pour trouver et remplir un champ caché avec le CityID.

Mon formulaire Boutique (partagé avec les actions Modifier et Créer) utilise Html.EditorFor (model => model.City) pour la propriété de navigation City, plutôt que d'utiliser la colonne CityID.

Eh bien, la ligne de fond est que id ne fonctionne pas, comme le contrôleur tente de mettre à jour incomplète objet Ville:

Impossible d'insérer la valeur NULL dans colonne « Nom », table ' C: \ UTILISATEURS \ ANDREA \ DOCUMENTS \ VISUEL STUDIO 2010 \ PROJECTS \ INCONSEGNA \ INCONSEGNA \ APP_DATA \ INCONSEGNA.MDF.dbo.Cities '; La colonne n'autorise pas les valeurs NULL. INSERT échoue. L'instruction a été terminée .

assez juste, je ne suis pas retourner un objet complet « City », mais en fait, ce que je besoin est juste l'élément CityID: le reste ne sert à rien, ou doit être récupéré par le modèle de l'éditeur (quelque chose qui, autant que je peux voir, ne peut pas être fait). Honnêtement, je préférerais utiliser un modèle d'éditeur juste pour la colonne CityID de la table des Shops (ou d'autres tables qui auront la même colonne). Cela signifierait que je dois créer un modèle d'éditeur pour un type générique "int" et que je dois déclarer explicitement quel modèle d'éditeur je veux utiliser lors de l'appel à Html.EditorFor(): Je préfère laisser MVC trouver Pour cela, pour la colonne CityID (de type int), un modèle d'éditeur personnalisé appelé "City" ou même "CityID" doit être utilisé: c'est pourquoi j'ai essayé d'utiliser le type "City" de la propriété de navigation.

Un conseil?

+0

J'ai oublié de mentionner que mon modèle d'éditeur a réellement besoin d'une « ville » objet, car elle doit montrer la propriété « Name »/colonne, lorsque je l'ai déjà avoir une valeur "CityID" dans l'objet Shop. Par exemple, ShopID = 1 est un enregistrement existant qui a CityID = 2 qui correspond à la ville "Rome". Lorsque je modifie l'enregistrement Shop existant, mon modèle d'éditeur doit afficher "Rome". –

Répondre

0

En cinq mois, j'ai réalisé à quel point ma question était stupide, mais à l'époque je n'avais pas assez de connaissances pour comprendre comment travailler correctement avec Entity Framework et MVC.Je pense que je peux répondre à ma propre question en disant que je ne suis pas censé créer des modèles d'éditeur pour une propriété de navigation, quand je peux travailler librement avec la propriété de l'entité liée à la clé étrangère et, si j'ai besoin d'ajouter ViewModel (ou ViewData) toutes les données dont j'ai besoin pour afficher une liste déroulante (voir en retard).

Dans ce cas, la clé étrangère serait CityID. Quand j'appelle le Html.EditorFor() je peux spécifier quel modèle (par exemple "CitySelector", ou ce que je veux) que je dois utiliser (peut-être même utiliser l'annotation de données dans le ViewModel: je ne sais pas à ce sujet). EditorTemplate est une vue partielle appelée "CitySelector", dans le dossier EditorTemplates: là, je peux afficher une liste déroulante ou, mieux encore, une zone de saisie semi-automatique (jQuery). La solution jQuery serait la meilleure approche pour afficher une liste de villes, sans les charger toutes dans ViewModel/ViewData.

l'espoir d'avoir correctement répondu à ma propre question :)

Questions connexes