2016-04-20 4 views
0

Wer würde das denken, aber Ich brauche tatsächlich 3 Ebenen von verschachtelten Anführungszeichen in einer ASP.NET WebForms-Seite.Verschachteln von Anführungszeichen in HTML> JavaScript> WebForms oder wie man eine .NET-Methode in einer JavaScript-Methode aufruft

Hier ist, was ich habe:

<img 
    src='<% ResolveClientUrl("~/SwissStyleguide/img/swiss.svg"); %>' 
    onerror="this.onerror=null; this.src='SwissStyleguide/img/swiss.png';" 
    alt="Confederatio Helvetica" 
/> 

nun der erste Teil, eine dynamisch erstellte URL zum src Attribute zuweisen funktioniert gut. Der Server löst die angegebene spezielle URL auf und erstellt eine absolute Verknüpfung, die der Client abrufen kann.

Aber die onerror Handler ist komplizierter: Da die src URL zum PNG-Bild ist bereits in einem Ausdruck mit doppelten Anführungszeichen, kann ich nicht die ASP.NET ResolveClientUrl Methode aufrufen, die streng doppelte Anführungszeichen für die String-Argument erfordert.

Ich habe versucht, es zu tun, wie folgt aus (funktioniert nicht!)

<img 
    src='<% ResolveClientUrl("~/SwissStyleguide/img/swiss.svg"); %>' 
    onerror="this.onerror=null; this.src='<% ResolveClientUrl("~/SwissStyleguide/img/swiss.png"); %>';" 
    alt="Confederatio Helvetica" 
/> 

Aber ohne viel Überraschung, Visual Studio beschwert sich über diese Saite. Die einzige Idee, die mir in den Sinn kommt, ist eine String-Konstante zu verwenden, um die innersten Anführungszeichen zu vermeiden, aber das scheint sehr hässlich zu sein.

Gibt es eine Möglichkeit zu entkommen oder andere oder alle Anführungszeichen anders zu spezifizieren, damit das funktioniert?

Hinweis: Ich weiß über diese Frage: When to use double or single quotes in JavaScript?, aber das Ändern der Anführungszeichen hilft in diesem Fall nicht.

Antwort

1

Nun, ... dies erwies sich als eine Instanz der "<% $, <% @, <% =, <% # ... was ist der Deal?" WebForms Problem, hier perfekt beantwortet: https://stackoverflow.com/a/957321/79485

Die Lösung besteht darin, das Gleichheitszeichen nach dem Prozentzeichen zu verwenden und das abschließende Semikolon wegzulassen. Gefällt mir:

Ich lasse die Frage und diese Antwort hier als Erinnerung daran, dass jemand darüber stolpert.

0

Wie wäre es, stattdessen die Attribute aus dem Code-Behind zu setzen?

ASPX-

<img id="image" runat="server" alt="Confederatio Helvetica" /> 

aspx.cs (Page_Load)

image.Attributes.Add("src", Page.ResolveUrl("~/SwissStyleguide/img/swiss.svg")); 
image.Attributes.Add("onerror", "this.onerror=null; this.src='" + 
    Page.ResolveUrl("~/SwissStyleguide/img/swiss.png") + "';"; 
+0

Ja, das würde auch funktionieren. Wie ich jedoch herausgefunden habe, sind die Zitate eigentlich nicht das Problem. – Marcel

+1

Server.MapPath würde auf dem Serversystem einen absoluten Pfad angeben, nicht einen, der vom Client aufgelöst wird. Sie sollten das in Ihrer Antwort ändern. – Marcel