2009-08-20 9 views
5

Welche wird empfohlen? Lassen Sie mich erklären, was ich erreichen möchte!
Ich habe eine Seite von vielen Benutzern verwendet, jeder Benutzer hat eine andere Rolle wie Admin, Operator, normaler Benutzer.
Wenn ein Client diese Seite öffnet, möchte ich eine Reihe von Steuerelementen (Schaltflächen) anzeigen, die von ihrer Rolle abhängen.
admin darf x und y ausführen, aber ein normaler Benutzer darf diese Aktionen nicht ausführen.
ASP.NET: Dynamische Laststeuerungen vs Visible = True

Um zu erreichen, was ich tun möchte, welcher Ansatz ist der beste?
Soll ich alle Steuerelemente in HTML definieren, dann die Sichtbar-Eigenschaft umschalten oder die benötigten Steuerelemente dynamisch laden?

Für Sichtbar = falsch Ich mache mir Sorgen über Server-Verarbeitungszeit. Selbst wenn HTML-Markup nicht an den Client für ein Visible = false-Steuerelement gesendet wird, weiß ich, dass das Steuerelement noch von ASP .NET geladen und möglicherweise sogar verarbeitet wird, aber sein HTML-Ergebnis wird nicht in den Ausgabestream geschrieben.

Für eine dynamisch geladene Steuerung ist es unpraktisch, dass sie beim Postback neu initialisiert werden müssen, außerdem gibt es einige Probleme mit Ereignissen und Postback.

Antwort

3

Ich würde es nicht dynamisch tun, da der Gewinn die Komplexität oder wahrgenommene Einsparungen nicht wert ist. Beachten Sie auch, wenn Sie visible = false festlegen, dass das Viewstate für Ihre Steuerelemente weiterhin aktiviert ist. Wenn Sie sich Sorgen um die hin- und hergehenden Daten machen und sich mit einem größeren Viewstate beschäftigen, stellen Sie sicher, dass Sie den Viewstatus für alle Steuerelemente oder für ein übergeordnetes Panel, das sie enthält, deaktivieren. Sie werden die gleichen Unannehmlichkeiten haben, um ihren Zustand beim Postback zu behalten, als wenn sie es dynamisch tun würden.

Außerdem ist es viel einfacher, es nicht-dynamisch zu machen, wenn man mit dem nächsten Typ arbeitet. Das Layout ist offensichtlich und einfacher zu visualisieren, als zu versuchen herauszufinden, welcher Code wann wo platziert wird.

Das dynamische Erstellen von Steuerelementen bringt wirklich nicht viel, außer dem Ausschluss von viewstate und möglicherweise vernachlässigbarer Server-Seite. Ich denke, Sie würden es schwierig finden, sogar einen beträchtlichen Unterschied zu messen, sogar unter Last zwischen einem Steuerelement ohne Sichtkontrolle und dem Overhead, bei dem dynamisch nach Bedarf hinzugefügt werden muss.

Schließlich ist es einfacher, es nicht dynamisch zu tun, also warum nicht den einfachsten Weg zuerst nehmen und sehen, ob es ein Problem ist. Wenn es zu einem Problem wird, verfeinern Sie es gegebenenfalls.

1

.Visible = false ist ein recht vernünftiger Ansatz dafür. Kümmern Sie sich nicht um die Geschwindigkeit dieser Methode, bis Sie durch Profiling beweisen, dass es erforderlich ist.

1

Was passiert, wenn Sie setzen Kontrollen von verschiedenen Rollen in verschiedenen Panel und einfach sichtbar/unsichtbar ganze Platte

+0

interessanter Ansatz, aber nicht in meinem Fall arbeiten. admin kann x und y ausführen, und ein Moderator kann auch x-Aktion ausführen, aber nicht –

+0

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

+0

if (Moderator) { x.visible = wahr y.visible = false } –

1

Ein weiterer Nachteil mit dynamischen Kontrollen sind die große Menge von spröden Code, den Sie haben, schreiben sie, und die Kopfschmerzen zu behandeln mit dem Debuggen von ihnen. Wenn Sie keine extrem komplexen Steuerelemente haben, die zeitraubende Dinge erfordern, oder wenn Sie tatsächlich ein Leistungsproblem erkannt haben, würde ich die unsichtbare Methode dringend empfehlen (und dies regelmäßig tun). Es ist das KISS-Prinzip in Aktion (ganz zu schweigen vom Prinzip "do not pre-optimize").