Ich würde empfehlen, Ihren Code so zu refactoring, dass alle gängigen JS-Logik an einem Ort, nicht in jedem UserControl gespeichert ist. Dies wird die Größe Ihrer Seite um eine gute Marge reduzieren.
Sie können die ID des UserControl an die gemeinsame JS-Methode (s) übergeben, um zwischen den UserControls zu unterscheiden.
Für das Problem der Begrenzung des Bereichs Ihrer "UserControl" Variable könnten Sie eine Art von Schlüssel/Wert-Struktur speichern, um Ihre UserControl-spezifischen Wert zu halten - der Schlüssel wäre die UserControl ClientID, und der Wert wäre die Variable, an der Sie interessiert sind.
Zum Beispiel:
var UCFlags = new Object();
//set the flag for UserControl1:
UCFlags["UC1"] = true;
//set the flag for UserControl2:
UCFlags["UC2"] = false;
auf sie zuzugreifen, geben Sie einfach die ClientID des Usercontrol übergeben in der UCFlags Array:
myFlag = UCFlags["UC1"];
Auf der Server-Seite, die Konstante ersetzen strings "UC1" oder "UC2" mit
<%= this.ClientID %>
wie folgt aus:
myFlag = UCFlags["<%= this.ClientID %>"];
Sie können immer noch die <% = this.ClientID%> Syntax verwenden, obwohl sich der Großteil der JS in einer separaten Datei befindet; einfach setzen
UCFlags["<%= this.ClientID %>"] = value;
vor dem Aufruf, die JS-Datei einzubetten.
Ryan - Ich kann eine beliebige Anzahl von Benutzersteuerelementen auf der Seite haben. Daher kann das UCFlags-Array nicht deterministisch erstellt werden. UCFlags ["UC1"] = true; UCFlags ["UC2"] = false; .. .. .. UCFlags ["UCn"] = false; –
@Bob: Ich verstehe, aber mit dieser Methode müssen Sie nicht wissen, was und wie viele UCs sind - einfach sagen UCFlags ["<% = this.ClientID%>"] = True wird eine Eigenschaft erstellen (dot ClientID) auf dem UCFlags-Objekt und initialisiere den Wert auf 'true'. –
Ah, ich sehe, dass Sie Hashtabellen in Javascript verwenden. Es sah aus wie ein Array das erste Mal, als ich es sah :) Danke –