ciao,
toolamah ha scritto:
A questo punto, mi chiedo quale sia la tecnica corretta per conservare i dati tra i vari post
Un'Action che riceve dati dal POST può pur sempre ripassarli alla View che li renderizzerà opportunamente, affinché possano essere poi reinviati in un nuovo POST (e il ciclo ricomincia).
Forse però bisogna chiedersi se avere un SearchParameterViewModel con 50 proprietà sia la soluzione migliore.
Per prima cosa, hai questi 50 campi che viaggiano avanti e indietro tra client server, spesso vuoti perché il caso tipico magari vuole che l'utente ne valorizzi uno o due.
Inoltre, non conosco nel dettaglio la tua implementazione ma immagino che il tuo SearchParameterViewModel non ti lasci indicare il
criterio con cui effettuare la ricerca. Se ora ti limita ad usare l'operatore "uguale" o "contiene" sarebbe invece auspicabile supportare anche "non contiene" o "finisce con" o "diverso da" o "minore/maggiore di".
E comunque, anche l'interfaccia grafica potrebbe avere i suoi problemi: come presenti i campi all'utente, con 50 textbox? Ouch, potrebbe diventare caotico e difficile da gestire, soprattutto quando i campi cambiano o aumentano.
Proverei a ristrutturare la pagina in questo modo:
- Nessun ricaricamento di pagina, in modo da non dover far rimbalzare i dati tra client e server. Passerei i criteri di filtro con una richiesta Ajax da cui otterrei i risultati in formato JSON. Li presenterei nella pagina in formato tabellare usando un motore di templating tipo KnockoutJs, o un plugin di jQuery tipo DataTables.
- L'interfaccia grafica del filtro prevederebbe solo 3 campi: un menu a tendina popolato tramite reflection da cui selezionare il nome del campo; un altro menu a tendina da cui scegliere l'operatore (uguale, diverso, maggiore, ecc..) e una casella di testo in cui inserire il valore. Cliccando un bottone "Aggiungi criterio", accoderei il criterio ad una piccola lista di riepilogo di tutti i criteri aggiunti fino a quel momento. Immediatamente formerei la richiesta Ajax includendo tutti e soli i criteri presenti in quella lista.
- Lato server preparerei un ApiController o un WCF DataService, in modo da poter interrogare la sorgente dati usando il protocollo OData.
In alternativa, la richiesta Ajax può essere formata nel modo che preferisci. L'importante è che tu riesca a ricreare un'espressione di filtro da dare in pasto al tuo metodo MyService.Search().
ciao