ASP.NET MVVM Gestione di più oggetti Data Transfer su una singola pagina

1

Ho una pagina "edit" di asp.net mvc che consente all'utente di apportare modifiche all'entità padre e quindi anche di "creare" entità figlio sulla stessa pagina. Nota: sto facendo questi oggetti per il trasferimento dei dati.

public class CustomerViewModel
{
    public int Id { get; set; }
    public Byte[] Timestamp { get; set; }
    public string CustomerName { get; set; }
    public etc..
    public CustomerOrderCreateViewModel CustomerOrderCreateViewModel { get; set; }
}

Secondo me ho due moduli html. Uno per i post Http di "modifica" dei clienti e l'altro per i post Http di "Creazione" di CustomerOrder. Nella pagina di visualizzazione, carico il modulo "create" CustomerOrder utilizzando:

<div id="CustomerOrderCreate">
    @Html.Partial("Vendor/_CustomerOrderCreatePartial", Model.CustomerOrderCreateViewModel)
</div>

I moduli di azione in formato html di CustomerOrder su un altro controller HttpPost ActionResult rispetto al risultato di azione "modifica" del cliente.

La mia preoccupazione è questa, sul controller CustomerOrder, in HttpPost ActionResult

[HttpPost]
public ActionResult Create(CustomerOrderCreateViewModel vm)
{
    if (!ModelState.IsValid)
    {
        return [What Do I Return Here]
    }
    ...[Persist to database code]...
}

Non so cosa restituire se lo stato del modello non è valido. Al momento non è un problema, perché la convalida discreta di jQuery gestisce la convalida sul client. Ma cosa succede se ho bisogno di una convalida più complessa (ad esempio: il server deve gestire la convalida).

    
posta meffect 09.11.2012 - 01:23
fonte

1 risposta

3

Bene, è un problema ora perché non puoi fidarti di jQuery per fare la tua convalida per te. Non puoi fidarti di nulla sul client perché non è davvero sotto il tuo controllo. Devi convalidare tutto sul server, anche se lo stai facendo lato client solo per essere chiari.

Ciò che chiami ViewModel è ciò che mi piace chiamare EditModel . Ovvero, una rappresentazione appiattita del Model che può essere in uno stato non valido. Il tuo server deve essere in grado di tradurre da ViewModel DTO a Model e viceversa, ma deve anche avere la logica di convalida per controllare ViewModel prima di eseguire la conversione.

Quindi quando si invia il DTO al server, si ottiene sempre un altro ViewModel . Nel caso in cui sia stato un successo, recuperi il tuo nuovo ViewModel con le modifiche applicate, oppure se non ha avuto esito positivo potresti recuperare un ViewModel con errori di convalida. La pagina deve mostrare quegli errori di convalida. Questi errori devono essere nella ViewModel come campi o come una raccolta di messaggi di convalida che vengono visualizzati in un pop-down o qualcosa del genere.

    
risposta data 09.11.2012 - 02:11
fonte

Leggi altre domande sui tag