ASP.NET

'&' in ImageUrl richtig darstellen

Kodierung einer URL im Image-Control verhindern

Das Image-Control aus System.Web.UI.WebControls kann hat, wie ich finde, einen kleinen Schönheitsfehler: es setzt beim Rendern der angegebenen ImageUrl das src-Attribut nicht so, wie man die URL angegeben hat. Aus

http://www.meinedomain.de/getimage.axd?parameter1=xyz&¶meter2=123

wird

http://www.meinedomain.de/getimage.axd?parameter1=xyz&parameter2=123

Ein kleiner, aber feiner Unterschied. Grund für diese Auflösung des Ampersand, scheint der Aufruf der Funktion ResolveClientUrl in der Image-Control-Methode AddAttributesToRender zu sein.

Nun rendern die gängigen Browser das Bild zwar richtig und ansonsten kann man dem mit einer URLEncode-Methode begegnen, aber wer es korrekt haben mag, dem bleibt nichts anderes übrig, als ein eigenes Server-Control von Image abzuleiten und darin diese Methode zu überschreiben.

Das Ganze ist eigentlich recht einfach, wenn man sich mal über den Reflector von Lutz Roeder angesehen hat, wie die Methode im Original aufgebaut ist. In einem neuen Projekt vom Type Klassenbibliothek legt man schlicht folgende neue Klasse an und erstellt daraus eine DLL, die man in das eigentliche Web-Projekt einbindet.

Imports System
Imports System.Web.UI

Public Class ImageParamSave
    Inherits System.Web.UI.WebControls.Image

    Private _doresolveClientUrl As Boolean = False

    ''' <summary>
    ''' Soll die angegebene URL über ResolveClientUrl aufgelöst werden,
    ''' wie im Standard-Image?
    ''' </summary>
    Public Property DoResolveClientUrl() As Boolean
        Get
            Return _doresolveClientUrl
        End Get
        Set(ByVal value As Boolean)
            _doresolveClientUrl = value
        End Set
    End Property

    Protected Overrides Sub AddAttributesToRender(ByVal writer As HtmlTextWriter)

        'NavigateUrl ohne Auflösung schreiben
        If DoResolveClientUrl = False Then

            'Src...
            If (Me.ImageUrl.Length > 0) Then
                writer.AddAttribute(HtmlTextWriterAttribute.Src, Me.ImageUrl)
            End If

            'Longdesc...
            If (Me.DescriptionUrl.Length > 0) Then
                writer.AddAttribute(HtmlTextWriterAttribute.Longdesc, _
                	Me.DescriptionUrl)
            End If

            'Verhindern, dass Src und Longdesc in der Basisklasse nochmal
            'geschrieben werden
            Me.ImageUrl = ""

        End If

        MyBase.AddAttributesToRender(writer)

    End Sub

End Class

Der vermeintliche Trick ist, dass man dem neuen Image-Control eine neue Eigenschaft verpasst, mit der man steuern kann, ober die URL aufgelöst werden soll, oder nicht. Da in jedem Fall auch die Basisklassenmethode aufgerufen werden muss, um die restlichen Attribute rendern zu lassen, muss man die Eigenschaft ImageUrl leeren, da diese dort abgefragt wird. Andernfalls würden zwei src-Attribute in den Ausgabe-Stream geschrieben.

Zu guter Letzt ist es nur noch nötig das neue Control am besten über die web.config bekanntzumachen:

<add tagPrefix="sct" namespace="zerbit.WebControls" assembly="ImageParamSave"/>

zum Download...
kick it on dotnet-kicks.de AddThis 0 wikio-Stimme(n) Trackback-Url...

173 Kommentare bislang...

  • The outcome Coach Outlet of the race, his advisers argued,he had the same percentage of Coach Factory Outlet Tea Party supporters,he also seemed to gain strength Chanel Bags among Tea Party supporters.
    173
    Coach Outlet : Mittwoch, 1. Februar 2012 03:46
  • Il Pakistan ha collaborato con <a href="http://www.guccimio.com/"> Scarpe Gucci </a> passato negozio online, ma i suoi leader arrestare un valico di frontiera utilizzato per la fornitura. le truppe il mese scorso dopo 24 soldati pachistani sono stati uccisi da aerei della NATO. ha detto che mira militanti gucci borse laterali negozio on-line il Pakistan di borse gucci confine negozio on-line dopo che le truppe della coalizione in Gucci Borse a mano. Il Pakistan dice borse di Gucci attacco negozio on-line è stato provocato ed economico <a href="http://www.guccimio.com/"> Gucci Borse </a> Regno Unito ha rifiutato di cooperare con un'indagine di gucci borse negozio online incident.Gucci paradisi negozio di borse sicurezza online stanno andando a svolgere un ruolo di straordinaria importanza nel fine gucci negozio online borse borse gucci negozio online di successo di questo conflitto, ha detto Crocker. <a href="http://www.guccimio.com/"> Gucci Donne </a> aviatori negozio droni che operano dalle basi in Nevada e California si lamentano di frequenti cambi di turno, "noiose" monotonia, tensioni sulle famiglie e sempre più carichi di lavoro.
    172
    Scarpe Gucci : Samstag, 14. Januar 2012 02:56
  • Stevenchristian Coach Bags Louboutin at B.Riley & Company 8tWe get started with just a brief overview of the company. Christian louboutin was founded in 1990, went public three years later in 1993, and has grown into a leading designer and marketer of fashion footwear and accessories. We have a diversified brand Christian Louboutin Simple Pump 100mm(Brown) offering, which is targeted to a broad consumer audience of women, men, and children, shopping at various distribution channels. We have also developed a diversified business model that includes wholesale distribution to over 15,000 doors; 96 company-owned retail stores including one Internet store; a first-cost business, where we act a buying agent in procuring private-label footwear for various retailers; and a licensing business where we collect royalty income for the use of our brand names on various products. In 2006, our wholesale business accounted for approximately Coach Outlet 73% of our net sales, the remaining 27% came from the company-owned retail stores. The commission income that we earned from the private-label business and the royalty income that we earned from our licensing business are recorded as other income on the income statement
    171
    Christian Louboutin  : Mittwoch, 11. Januar 2012 12:12
  • 170
    chanelbags : Mittwoch, 11. Januar 2012 03:36
  • I have been looking looking around for this kind of information. Will you post some more in future? I'll be grateful if you will.
    169
    cheap evening dresses : Dienstag, 10. Januar 2012 07:12

Dein Kommentar hierzu...


Kommentar-Feed für diesen Beitrag
Gravatare werden unterstützt .:. eMail-Adressen werden nicht veröffentlicht
 

RSS-Feed

Die URL des Standard-Newsfeed von zerbit.de lautet:

http://www.zerbit.de/rssfeed.aspx

Login


 

 

Statistik



kürzlich kommentiert

Artikel 251

  • Datum: 30.01.2008
    Kategorie: ASP.NET
    Zugriffe: 6.398
    Kommentare: 173
    Trackbacks: 0

Letzte Beiträge

Kategorien

Buttons & More

Blog-Roll

Banner Piraten-Partei