Question

J'ai une application ASP.NET MVC. À un certain point, j'obtiens une forme de formulaire dans une méthode de contrôleur que je souhaite utiliser pour mettre à jour un modèle. Dans la collection, toutes les valeurs ne sont pas des propriétés de ce modèle et la propriété à mettre à jour est un élément d'une liste, et cette liste est également un élément d'une autre liste. Quelque chose comme ça (j'espère que c'est clair):

propertyToUpdate --> model.Items[0].Subitems[0].SomePropertyClass.Value;

J'ai essayé cela dans mon contrôleur:

UpdateModel(model);

Le problème est que cela ne fonctionne pas et je suppose que cela a quelque chose à voir avec le fait que la réflexion ne fonctionne pas. Je suis allé chercher et trébuché sur Cet article. Je comprends donc que l'utilisation du préfixe-paramètre résout le problème. Mais pas dans mon cas, car les propriétés sont "plus profondes" dans le modèle en tant qu'éléments d'une liste.

Est-ce que quelqu'un sait comment je peux résoudre ce problème?

Mise à jour:

Voici la modification de la propriété:

@model Q95.Domain.Property

<li>
    @Html.DisplayFor(p => p.Description) : 
    @Html.DisplayFor(p => p.Quantity.Value)
    @Html.DisplayFor(p => p.Quantity.Unit.Description)
    <br />
    @Html.TextBoxFor(p => p.Quantity.Value)
</li>

Ce modèle est appelé ceci:

<ul>
    @Html.EditorFor(model => model.SegmentRequirement.MaterialRequirements[j].Properties)
</ul>

Est-ce assez de code ou est-il encore quelque chose?

Mise à jour 2:

Ok, dans toutes les sous-propriétés, j'ai défini des constructeurs sans paramètres et maintenant j'appelle:

UpdateModel(segmentRequirement, "SegmentRequirement", form.ToValueProvider());

Cela met à jour le modèle, mais tout à partir des reprises de matériaux est réinstanciée ...: S

Était-ce utile?

La solution

UpdateModel fonctionne bien sur "Propriétés profondes".
Le problème est probablement que les données de la collection que vous obtenez ne sont pas égales aux noms de propriétés.
Vérifiez 3 endroits pour voir les valeurs que vous obtenez de la page

  1. Les valeurs de forme.

  2. Les données de l'itinéraire

  3. La chaîne de requête

Dans exactement cet ordre.

La clés devrait match vous modèle Noms de propriétés.


Mise à jour:
Comment faire correspondre les clés aux noms des propriétés?
L'ID d'entrée sera la clé que vous obtiendrez, modifiez les ID pour correspondre aux noms de vos propriétés, ou encore mieux, utilisez le Htmltextboxfor assistant: voir cette article:

Autres conseils

Vous devriez peut-être créer ViewModel aplati, puis l'utiliser pour remplir la vue, puis la synchroniser avec le modèle réel.

Pouvez-vous nous montrer votre modèle et votre point de vue, si vous n'utilisez pas HTMLhelper, vous devez alors très bien comprendre la convention de dénomination afin de faire fonctionner la liaison du modèle avec votre modèle. Donc, la première chose en premier est de nous montrer votre modèle et votre vue.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top