ASP.NET-MVC2: Perché TryUpdateModel ignora proprietà dopo il secondo livello della struttura oggetto del modello?

StackOverflow https://stackoverflow.com/questions/3412602

Domanda

Forse mi manca qualcosa qui, ma sembra che nulla nell'albero degli oggetti del modello 3 o più livelli verso il basso, viene ignorato quando si utilizza TryUpdateModel.

Per esempio (semplificato):

public virtual ActionResult SomeAction(int id, FormCollection form)
    {

        IValueProvider vpFrom = form.ToValueProvider();
        /*
        At this stage, vpForm contains:
        1)PropertyA
        2) PropertyB.SubPropertyA
        3) PropertyB.SubPropertyB.SubSubPropertyA
        */

        TryUpdateModel(someObjectModel, null, null, null, vpFrom);
        //The first two properties are applied, number (3) seems to be ignored

mi manca qualcosa qui? Se questo è solo il modo in cui è, qualcuno ha messo a punto una soluzione?

È stato utile?

Soluzione

Un progetto semplice realizzato con il seguente modello.

public class TestModel {
    public TestModelA A { get; set; }
    public string Name { get; set; }
}

public class TestModelA {
    public TestModelB B { get; set; }
    public string Name { get; set; }
}

public class TestModelB {
    public TestModelC C { get; set; }
    public string Name { get; set; }
}

public class TestModelC {
    public TestModelD D { get; set; }
    public string Name { get; set; }
}

public class TestModelD {
    public TestModelE E { get; set; }
    public string Name { get; set; }
}

public class TestModelE {
    public string Name { get; set; }
}

Ecco la mia modifica - che è essenzialmente uguali ai suoi

[HttpPost]
public ActionResult Edit(FormCollection form) {
    IValueProvider vpFrom = form.ToValueProvider();

    Models.TestModel t = new Models.TestModel();

    TryUpdateModel(t, null, null, null, vpFrom);

    return View(t);
}

Tutto questo funziona esattamente come previsto con tutti i modelli creati in modo corretto. L'unico problema che posso vedere accada è che forse non sta passando gli stessi nomi proprietà indietro dal modulo. (Non utilizzando <%: Html.TextBoxFor(model => model.A.B.C.CName)%> per esempio)

I modelli richiedono costruttori senza parametri. Ma sono sicuro che sarebbe ottenuto un errore su questo -. A meno che non si sta consumando l'errore

Quindi, senza ulteriori informazioni sul progetto, sarà difficile aiuto come una configurazione di base produce i risultati previsti.

Altri suggerimenti

Credo che il problema è in una delle classi del modello. Controllare, per favore, se PropertyB.SubPropertyB.SubSubPropertyA è davvero una proprietà, ma non è un campo. Una proprietà deve avere get e set di accesso.

Ecco la mia lista di controllo:

  1. Assicurati che stai ricevendo il posteriore valore nel modulo di richiesta. Richiesta [ "A.B.C.Name"] ed ecc.
  2. tutti i campi obbligatori sono in forma.
  3. ho avuto problema deleteOnNull con LINQ to SQL: Come impostare DeleteOnNull dal progettista per il futuro ref se si sta utilizzando L2SQL.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top