2010-06-16 6 views
1

J'ai un contrôle utilisateur qui rend une liste d'éléments. Chaque ligne contient un identifiant unique dans un champ masqué, un texte et un bouton de suppression. En cliquant sur le bouton de suppression, j'utilise jquery ajax pour appeler la méthode de contrôleur DeleteCA (voir ci-dessous). DeleteCA renvoie une nouvelle liste d'éléments qui remplace l'ancienne liste..net MVC RenderPartial restitue les informations qui ne sont pas dans le modèle

[HttpPost] 
public PartialViewResult DeleteCA(CAsViewModel CAs, Guid CAIdToDelete) 
{ 
    int indexToRemove = CAs.CAList.IndexOf(CAs.CAList.Single(m => m.Id == CAIdToDelete)); 
    CAs.CAList.RemoveAt(indexToRemove); 
    return PartialView("EditorTemplates/CAs", CAs); 
} 

J'ai vérifié que DeleteCA supprimait réellement l'élément correct. La liste modifiée des autorités de certification transmises à PartialView ne contient plus l'élément supprimé.

Quelque chose d'étrange se produit lorsque la vue partielle est rendue. Le nombre d'éléments dans la liste est réduit mais c'est toujours le dernier élément qui est supprimé de la liste. Les éléments rendus ne correspondent pas aux éléments de la liste/modèle envoyés à PartialView.

Dans le fichier usercontrol (ascx) j'utilise à la fois l'expression Model.CAList et lambda m => m.CAList.

Comment usercontrol peut-il rendre des éléments qui ne sont pas dans le modèle envoyé à PartialView?

Thanx Andreas

Répondre

1

Il semble que le ModelState est le problème ici, comme vous liez à CAs la ModelState sauvegarder ces valeurs en arrière-plan Attempted Values, de sorte que son vrai l'objet ne soit plus présent au modèle, mais le ModelSate a toujours les valeurs de l'objet supprimé. Vous pouvez essayer un:

ModelState.Clear(); 

Pour supprimer toutes ces anciennes valeurs.

+0

Ahh! Merci beaucoup Omar! – Andreas

0

Vérifiez dans firebug ce que la réponse est vraiment. De cette façon, vous pouvez voir si vous avez un problème côté serveur ou s'il s'agit d'un problème de jquery.

+0

Merci Malcolm. Je débogue la fonction de rappel dans javascript et il est clair que le HTML retourné contient les erreurs. C'est un problème côté serveur. – Andreas

Questions connexes