ASP.NET MVC: viste dinamiche con molti controlli simili

2

Ho una vista principale che ha diverse sezioni e un dropdown principale in alto che definisce il resto della vista. Tutte queste sezioni hanno alcuni dati sempre visibili e alcuni che devono essere nascosti quando determinati valori vengono scelti nel menu a discesa principale.

A partire da ora, ho delle viste parziali per ogni sezione, e ho molte dichiarazioni if / else nella mia vista per mostrare / nascondere le specifiche, che diventano sempre più goffe di giorno in giorno.

    
posta user2412146 21.07.2014 - 14:11
fonte

1 risposta

0

Il mio preferito sarebbe utilizzare il knockout per realizzare questo tipo di manipolazione della pagina attraverso un binding a due vie con una sorta di classe di "sicurezza". Io uso le virgolette qui perché non è davvero così tanto la sicurezza quanto la manipolazione dell'interfaccia. La sicurezza dovrebbe essere sempre gestita dal lato server. Tuttavia, con un buon modello a eliminazione diretta si sarebbe in grado di utilizzare la nomenclatura semplice come data-bind="visible: displayModel.IsSpecialRole" , e semplicemente aggiornando il modello si sarebbe in grado di avere il pieno controllo di ogni elemento. È molto semplice da gestire ed è molto semplice applicare AJAX per renderlo ancora più dinamico.

Se non lo si utilizza, un'altra tecnica che potrebbe essere più semplice da implementare sarebbe una classe di visualizzazione comune inserita nel ViewBag. Non sono un sostenitore del ViewBag, lo trovo goffo, ma sarebbe sicuramente utile qui. È possibile creare un metodo o una serie di metodi il cui compito sarebbe quello di generare la raccolta di attributi html in base ai condizionali. Uno degli output potrebbe essere una classe css che specifica solo display: none per assicurarsi che non venga visualizzata sulla pagina anche se viene prodotta. Ciò fornirebbe ancora HTML al lato client, ma non sarebbe visibile o utilizzabile per il client.

Una terza alternativa a tua disposizione sarebbe quella di creare il tuo metodo di estensione HtmlHelper che accetta gli argomenti su cui devi basare le tue decisioni condizionali. Il suo ritorno sarebbe l'output reso di qualsiasi action link o HTML grezzo che verrebbe prodotto. Devi stare attento, però, per assicurarti che l'estensione non generi nulla che faccia parte del modello. Dovrebbe generare solo elementi semplici con attributi di classe css e attributi di elementi predefiniti (src, href, ecc.). L'unico vero vantaggio è che i condizionali vengono estratti nel metodo di estensione e le definizioni degli elementi nel modello risulterebbero più semplici. Uno svantaggio è che i tuoi condizionali verrebbero estratti nel metodo di estensione. Ciò potrebbe offuscare il comportamento dei futuri sviluppatori / manutentori.

    
risposta data 21.07.2014 - 14:55
fonte

Leggi altre domande sui tag