Domanda

Ho un'applicazione MVC ASP.NET. Ad un certo punto ricevo una forma di forma in un metodo del controller che voglio utilizzare per aggiornare un modello. Nella raccolta non tutti i valori sono proprietà di quel modello e la proprietà da aggiornare è un elemento da un elenco e quell'elenco è anche un elemento di un altro elenco. Qualcosa di simile a questo (spero che sia chiaro):

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

L'ho provato nel mio controller:

UpdateModel(model);

Il problema è che non funziona e presumo che abbia qualcosa a che fare con il fatto che la riflessione non funziona. Sono andato a cercare e inciampato Questo articolo. Quindi capisco che l'uso del prefisso-parametro risolve il problema. Ma non nel mio caso, poiché le proprietà risiedono "più in profondità" nel modello come elementi di un elenco.

Qualcuno sa come posso risolverlo?

Aggiornare:

Ecco l'editorTemPlate per la proprietà:

@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>

Questo modello si chiama così:

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

Questo è abbastanza codice o manca ancora qualcosa?

Aggiornamento2:

Ok, in tutte le seconde proprietà ho definito i costruttori senza parametri e ora chiamo:

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

Questo aggiorna il modello, ma tutto da MaterialSequirements viene reinstallato ...: s

È stato utile?

Soluzione

UpdateModel funziona bene su "Deep Properties".
Il problema è probabilmente i dati nella raccolta che ottieni non sono uguali ai nomi delle proprietà.
Controlla 3 posti per vedere i valori che ottieni dalla pagina

  1. I valori della forma.

  2. I dati del percorso

  3. La stringa di query

Nell'esatto ordine.

Il chiavi dovrebbe incontro Il tuo modello Nomi delle proprietà.


Aggiornare:
Come abbinare le chiavi ai nomi delle proprietà?
L'ID input sarà la chiave che otterrai, modificherà gli ID in modo che corrisponda ai nomi delle tue proprietà, o anche meglio, usa il Htmltextboxfor Helper: vedi questo articolo:

Altri suggerimenti

Forse dovresti creare ViewModel appiattito e quindi usarlo per popolare la vista e successivamente sincronizzarla con il modello reale.

Puoi mostrarci il tuo modello e il tuo punto di vista, se non stai usando Htmlhelper, devi quindi capire molto bene la convenzione di denominazione per far funzionare il modello il modello con il tuo modello. Quindi la prima cosa prima è mostrarci il tuo modello e la tua visione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top