2009-05-10 8 views
5

Ich suche nach dem Hinzufügen von Masterseiten zu einer vorhandenen Site, habe aber festgestellt, dass die IDs der Elemente mit einem Code vorangestellt werden (z. B. ctl00_MainPageContent_).Kann verhindert werden, dass Masterseiten Element-IDs ändern?

Leider bricht dies vorhandene Skripts auf der Seite, die die ursprüngliche, nicht geänderte Element-ID verwenden.

Ich weiß, dass ich es durch <%= Element.ClientID %> ersetzen kann, aber es wäre toll, wenn ich dieses Verhalten ganz deaktivieren könnte.

Also, kann ich die ursprünglichen IDs behalten?

Antwort

5

Die Frage wurde bereits in der früheren Post beantwortet: Remove MasterPage Generated ID

Die Lösung mit dem Render überschreibt Ereignis mit dem folgenden Code:

Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter) 
    Dim Html As New StringWriter() 
    Dim Render As New HtmlTextWriter(Html) 
    MyBase.Render(Render) 
    writer.Write(Html.ToString().Replace("name=""ctl00$ContentBody$", _ 
        "name=""").Replace("id=""ctl00_ContentBody_", "id=""")) 
End Sub 
+0

Interessanter Ansatz. Gibt es irgendwelche Leistungsüberlegungen, um die vollständige Seitenausgabe so zu erfassen? Oder mögliche Probleme mit Änderungen der Namenskonvention in der Zukunft? –

+0

Der Leistungseinbruch ist in diesem Fall vernachlässigbar. Dies sollte jedoch als Problemumgehung und nicht als permanente Lösung betrachtet werden, da Sie die Möglichkeit erhalten, dass Master-Seiten eindeutige IDs generieren. Nichtsdestoweniger ist positiv, dass, wenn sich die Namenskonvention für Masterpage-Elemente in der Zukunft ändert, Sie nur eine Änderung am Renderereignis vornehmen müssen. –

+0

Nicht sicher, ob das der richtige Weg ist ... Das Hardcoding ist schlecht und wenn Sie die Container neu anordnen, bricht die Logik. – Ben

4

Sie können ClientID und UniqueID in den Kontrollen außer Kraft setzen. Dies ist von here, ein Artikel von Rick Strahl.

public override string UniqueID 
{ 
    get 
    { 
     return this.ID; 
    } 
} 

public override string ClientID 
{ 
    get 
    { 
     return this.ID; 
    } 
} 
+0

Das ist auch eine interessante Idee, aber ich denke nicht, dass es für mich funktioniert, da es einige ernsthafte Einschränkungen mit Postbacks gibt und ich versuche, die Änderungen, die ich machen muss, auf den existierenden Code zu beschränken Base. Vielen Dank! –

Verwandte Themen