2009-03-09 9 views
0

Diese Frage ähnelt Forcing client ids in ASP.NET aber nicht ganz.Ermitteln von ASP.NET-Client-IDs

ASP.NET generiert Client-IDs nach einem eigenen internen Mechanismus. Ich möchte eine xmlhttprequest-Abfrage im Hintergrund ausführen, um eine Aktualisierung durchzuführen und selektiv einige der Steuerelemente neu zu laden. Mein Plan ist, die Abfrage auszuführen und die Seite im Hintergrund neu zu generieren, aber nur die Steuerelemente, die ich aktualisieren möchte, selektiv zu rendern - dann ersetze einfach die HTML dieser Steuerelemente durch die neuen Steuerelemente.

Meine Frage ist, kann ich erwarten, dass die clientids die gleichen sein (da ich die gleiche Seite erzeuge) und gibt es etwas anderes, das ich berücksichtigen muss, wenn ich asp.net-generated html aktualisieren möchte durch Javascript?

Antwort

1

ASP.NET generiert Steuerelementnamen und IDs entsprechend der Position des Steuerelements in der Seitenhierarchie.

Wenn sich diese Hierarchie zwischen aufeinanderfolgenden Seitenregenerationen nicht ändert, können Sie sicher sein, dass sich die generierte Steuerelement-ID nicht unterscheidet. Ein weiterer bemerkenswerter Punkt ist, dass Steuerelement-IDs bei jeder Anfrage zufällige Namen haben, wenn Sie das Fragment-Caching verwenden.

Eine andere Idee wäre, die ClientIDs (verfügbar serverseitig) in versteckte Felder zu speichern und dann diese Informationen per Skript abzurufen.

1

Während das System vorhersehbar ist, ist es nicht ratsam, eine Abhängigkeit von diesen Namen aufzubauen, da diese generiert und die Möglichkeit bietet, sowohl eine schwierige Wartungslast als auch die Möglichkeit für einige subtile Bugs zu erzeugen ändern, welche sie werden.

Dies ist alles Teil des Problems mit der Arbeit mit asp.net im Allgemeinen, ich schlage vor, Sie finden eine zuverlässigere Möglichkeit zum Zielknoten, wie Targeting Non-Asp-Wrapper-Knoten und dann auf die Kinder oder Targeting Klassennamen.

1

Ich verwende den folgenden Trick, um die ClientID einer ASP.NET-Kontrolle zu bekommen:

<script type="text/javascript"> 
//textBox will contain the DOM element rendered for the <asp:TextBox /> control 
var textBox = document.getElementById("<%= nameTextBox.ClientID %>"); 
</script> 
<asp:TextBox runat="server" ID="TextBox1" /> 
Verwandte Themen