asp.net MVC 5 - Ha importanza se il mio ModelState non è valido e non ne ho bisogno?

0

Ho una tabella top10 (come dicono i primi 10 ristoranti). Ogni 10 righe principali può contenere fino a 10 top10items associati.

Modelli

public class Top10
{
    public Guid Id { get; set; }

    [Required(ErrorMessage="Title Required")]
    public string Title { get; set; }
}

public class Top10Item
{
    public Guid Id { get; set; }
    public Guid Top10Id { get; set; }
    public Guid PlaceId { get; set; }
    public Int16 Position { get; set; }

    public Place place { get; set; }
}

Visualizza modello

public class Top10ItemsPlaceDropdown
{
    public Top10 top10 { get; set; }

    [Display(Name = "Place")]
    public Guid SelectedPlaceId { get; set; }

    public IEnumerable<Place> Places { get; set; }

    public IEnumerable<SelectListItem> PlaceItems
    {
        get
        {
            return new SelectList(Places, "Id", "PlaceName");
        }
    }

    public IEnumerable<Top10Item> items { get; set; }
}

Lego ViewModel a una vista.

Lo uso per popolare un menu a discesa nella pagina e compilare una griglia di elementi per il primo 10. L'utente può quindi selezionare un elemento dal menu a discesa, che viene quindi pubblicato dal metodo [httpPost] quando l'utente invia il modulo.

Il problema - se è un problema - è che quando la vista carica [httpGet] - tutte le proprietà - e quelle di tutti gli oggetti secondari sono valide. Tuttavia, quando la vista torna al controller [httpPost], molti sono vuoti (non validi) perché nella vista non sono nei campi del modulo e non vengono postati indietro (non è necessario che siano).

Questo significa Model.IsValid == false. Se avessi un riepilogo di convalida sulla pagina, questo lo invocherebbe.

Questo non sembra una buona pratica - ma cosa dovrei fare su questo? Il modello serve ai miei scopi quando la pagina viene caricata, ma tutto ciò di cui ho bisogno quando la pagina viene pubblicata è top10Id e SelectedPlaceId.

    
posta niico 21.09.2016 - 22:20
fonte

1 risposta

0

Il primo GET restituisce una vista creata da un ViewModel valido.

Il POST restituisce quindi una vista creata da un ViewModel non valido, con avvisi di convalida.

Se la seconda vista è uguale alla prima, il ViewModel deve essere valido oppure la visualizzazione non sarà corretta a causa delle proprietà mancanti.

Se la seconda vista è diversa dalla prima, dovresti usare un altro ViewModel, che contiene solo le proprietà necessarie per la seconda vista, senza avvisi di convalida

    
risposta data 24.09.2016 - 07:45
fonte

Leggi altre domande sui tag