Disons que j'ai une vue d'édition qui est fortement typée à une table appelée "MyData". La vue comporte plusieurs onglets, chacun avec plusieurs champs différents de la table. Pour les performances, les données ne sont chargées que lorsque l'onglet est affiché. Par conséquent, si vous modifiez uniquement un champ de l'onglet 1 et soumettez le formulaire, les données de l'onglet 2 ne seront pas chargées.Meilleure façon d'enregistrer des données sur une vue fortement typée lorsque tous les champs ne sont pas chargés
Le problème que je rencontre est sur le soumettre. Je fais la routine typique de trouver l'enregistrement existant dans la base de données et mise à jour des valeurs transmises:
<AcceptVerbs(HttpVerbs.Post)> _
Function Edit(ByVal data As MyData) As ActionResult
Using dc = New MyDataContext
Dim orig = dc.MyDatas.Single(Function(x) x.id = data.id)
orig.name = data.name
orig.desc = data.desc
...
SubmitChanges()
End Using
Return View(orig)
End Function
Cependant, cette méthode ne sait pas quels onglets ont été chargés, donc si l'onglet avec « desc » sur il n'est pas chargé, cette méthode pense que l'utilisateur a supprimé le champ "desc" et envoie NULL à la base de données.
Comment puis-je construire ceci afin que seuls les champs chargés soient envoyés à la base de données et que les champs non chargés soient ignorés?
Je suppose que vous ne voulez pas dire "UpdateModel (orig)", car cela ne fait référence à aucune des données de formulaire, mais comment puis-je configurer cela à partir de mon exemple original? Serait-ce "UpdateModel (data)"? Lorsque j'essaie cela, je reçois un peu inutile "Le modèle de type" MyProject.MyData "n'a pas été mis à jour avec succès." – gfrizzle