2009-08-20 10 views
5

Quale si consiglia? Lasciami spiegare cosa voglio raggiungere!
Ho una pagina utilizzata da molti utenti, ogni utente ha un ruolo diverso come amministratore, operatore, utente normale.
Quando un client apre quella pagina, voglio visualizzare un insieme di controlli (pulsanti) che dipende dal loro ruolo.
admin è autorizzato a fare xey, ma un utente normale non è autorizzato a fare queste azioni.
ASP .NET: controlli di carico dinamici vs Visible = true

Al fine di ottenere ciò che voglio fare, quale approccio è il migliore?
Devo definire tutti i controlli in HTML, quindi attivare la proprietà Visible o caricare dinamicamente i controlli necessari?


Per Visible = false Sono preoccupato per il tempo di elaborazione del server. Anche se il markup HTML non viene inviato al client per Visible = false control, so che il controllo è ancora caricato da ASP .NET e forse anche elaborato, ma il suo risultato HTML non viene scritto nel flusso di output.

Per il controllo caricato in modo dinamico, un inconveniente è che devono essere reinizializzati su Postback, inoltre ci sono alcuni problemi con eventi e postback.

risposta

3

Non lo farei dinamicamente in quanto il guadagno non vale la complessità o il risparmio percepito. Inoltre, se imposti visible = false, tieni presente che lo stato di visualizzazione è ancora abilitato per i tuoi controlli. Se sei preoccupato per i dati avanti e indietro e gestisci uno stato di visualizzazione più ampio, assicurati di disabilitare il viewstate per tutti i controlli o per un pannello principale che li contiene. Avrai lo stesso inconveniente per mantenere il loro stato sul postback come farlo dinamicamente però.

Inoltre, farlo in modo non dinamico è molto più facile da mantenere al prossimo ragazzo che lavora con il codice. Il layout è ovvio e più facile da visualizzare rispetto a cercare di capire quale codice quando sta mettendo dove.

Creazione di controlli in modo dinamico in realtà non ti guadagna molto a tutti tranne che per l'esclusione del lato server di elaborazione viewstate e forse trascurabile. Penso che sarebbe difficile persino misurare una differenza notevole, anche sotto carico, tra un controllo non-viewstate e il sovraccarico di doverli aggiungere dinamicamente secondo necessità.

Infine, è più facile non farlo dinamicamente, quindi perché non prendere prima il percorso più semplice e vedere se si tratta di un problema. Se diventa un problema, perfezionalo dove è necessario.

1

.Visible = false è un approccio abbastanza ragionevole per questo. Non preoccuparti della velocità di questo metodo finché non provi, tramite la creazione di profili, che è necessario.

1

cosa succede se si mettono i controlli di diversi ruoli nel pannello diverso e semplicemente Visibile/invisibile intero pannello

+0

approccio interessante ma non funziona nel mio caso. admin può fare xey, e un moderatore può anche fare x azione, ma non y –

+0

if (admin) { x.visible = true y.visible = true } –

+0

if (moderatore) { x.visible = true y.visible = false } –

1

Un altro inconveniente con controlli dinamici è la grande quantità di codice fragili che si deve scrivere per gestirli, e il mal di testa con il debug di loro. A meno che tu non abbia controlli estremamente complessi che fanno cose che richiedono tempo, o che hai effettivamente identificato un problema di prestazioni, ti consiglio vivamente il metodo invisibile (e regolarmente lo fai). È il principio KISS in azione (per non parlare del principio "non pre-ottimizzare").