2010-01-12 2 views
2

J'ai vue classe modèle qui ressemble à ceciTryUpdateModel ou UpdateModel où le modèle a un tableau

public class ViewModel 
{ 
    public string Name { get; set; } 
    public IList<SubViewModel> Subs { get; set; } 
} 

public class SubViewModel 
{ 
    public string Name { get; set; } 
    public bool IsSet { get; set; } 
    public int Id { get; set; } 
} 

Dans mon HTML je puis

<%= Html.TextBoxFor(x=>x.Name) %> 

<% foreach(var sub in x.Subs) { %> 
    <%= sub.Name %> 
    <%= Html.Checkbox("Subs["+index of current sub+"].IsSet",sub.IsSet) %> 
<% } %> 

Dans mon code de contrôleur pour soumettre des une forme entourant ceux-ci je fais ce qui suit

public Save() 
{ 
    var oldModel = GetOldModelFromSession(); 
    TryUpdateModel(oldModel); 
    SaveModelToDb(oldModel); 
} 

Maintenant, quand j'appelle essayer le modèle de mise à jour, il remplace le " Subs "liste avec une nouvelle plutôt que de simplement mettre à jour la propriété IsSet à l'index correct. Est-ce que cela peut fonctionner (je suppose que oldModel que j'obtiens est le même que celui qui a été envoyé à la page.)

Répondre

1

Eh bien, si vous acceptez une méthode FormCollection dans la méthode Save, vous pouvez analyser cette méthode pour: chaque valeur que vous recherchez, puisque c'est la collection de valeurs soumises dans un message. Vous pouvez également créer un nouvel objet, utiliser TryUpdateModel pour charger les valeurs dans cet objet et copier uniquement les valeurs dont vous avez besoin sur l'ancien objet.

Ou, vous pouvez essayer de reproduire la logique TryUpdateModel parce que je ne pense pas que vous pouvez changer ce comportement hors de la boîte, mais je peux me tromper ...

+0

Merci Brian, j'ai eu un sentiment qui pourrait être la réponse. –

Questions connexes