2011-01-10 15 views
0

Ich bin in einer asp.net-Listenansicht, in der ItemTemplate.asp.net (4) Listview gibt mir Probleme beim Generieren von IDs

<asp:ListView runat="server" ClientIDMode="Predictable" ClientIDRowSuffix="Texttranslations_key"ID="lvwTextitems"> 

Dies ist mein Code in der itemtemplate:

<span runat="server" onclick="openDiv('<%= EditItemDiv.ClientID%>')" style="width: 450px;"><%# Eval("Translation")%></span> 
<asp:panel runat="server" id="EditItemDiv" style="display:none"> 
<asp:TextBox runat="server" ID = "EditItemArea" TextMode ="MultiLine" Rows="12" Columns="50" Text="<%# Eval("Translation")%>"> 
</asp:TextBox> 

Jetzt habe ich zwei Probleme. Zuerst der Bereich: Ich möchte die ClientID des Asp: Panel in der Funktion openDiv(), so dass ich einige show-ausblenden-Funktionalität erstellen kann. Allerdings bekomme ich dies als Ergebnis:

<span onclick="openDiv(&#39;&lt;%= EditItemDiv.ClientID%>&#39;)" style="width: 450px;"> 

mein Code nicht als Code, sondern als Klartext, und ich weiß nicht, warum?

Zweitens diese Zeile wird mir ein Laufzeitfehler (Der Server-Tag nicht gut ausgebildet ist):

<asp:TextBox runat="server" ID = "EditItemArea" TextMode ="MultiLine" Rows="12" Columns="50" Text="<%# Eval("Translation")%>"> 

jemand kann mir helfen?

ps zuerst benutzte ich diesen Code für die Erzeugung der ids: "myid <% # Eval (" ID ")%>" aber das hat auch nicht Training ...

ps i ‚m immer Mühe, um, wenn> die Evaluierungs- und die <% #% verwendet wird, so ist es wahrscheinlich einige dumme Sache (ich hoffe)

+0

Das Problem, dass Ihr Eval nicht gut formatiert ist, liegt an den doppelten Anführungszeichen, die Sie sowohl zum Einschließen des Eval-Elements als auch des Elementnamens in Eval verwenden. Das würde funktionieren: Text = '<% # Eval ("Translation")%>' Hinweis Ich habe einfache Anführungszeichen verwendet, um das Eval zu umbrechen, während die doppelten Anführungszeichen innerhalb von –

Antwort

1

Wie in meinem Kommentar und von jamietre erklärte das Bindungsproblem Sie den Code ändern müssen zu beheben:

Text="<%# Eval("Translation")%>" 

zu

Text='<%# Eval("Translation")%>' 

Was das Problem mit dem Onclick von der Spannweite sollte es funktionieren, wie Sie wollen, wenn Sie nur den runat="server" Teil entfernen. Ich bin mir nicht sicher, warum, aber es scheint, dass das Hinzufügen der Steuerelemente die Onclick-Eigenschaft codiert.

Wenn Sie den runat = "Server" auf der Spanne benötigen, werde ich versuchen, eine andere Lösung zu finden, aber es gibt keine Garantien.

+0

"Ich bin mir nicht sicher, warum" aber das ist, weil das der ASP.NET ASPX-Modell ist Sie möchten runat = server _und_ onclick verwenden und dann den onclick zu einem onclientclick machen ... asp.net server controls haben kein GUI-Element (außer Sie geben ihnen einen) für den .aspx-Parser, um einen onclick zu binden. – jcolebrand

+1

Deine vorher und nachher sind die gleichen ... nur sayin ' –

+0

@jamietre reparierte es Danke, dass du mich darauf aufmerksam gemacht hast –

2

Für den ersten Teil, müssen Sie auf jeden Fall einen verbindlichen Ausdruck zu verwenden:

<%# EditItemDiv.ClientID %> 

Das Skript <% =%> hat keinen Kontext für jedes Element. Ich gehe davon aus, dass Sie die Syntax "paraphrasieren", von der Sie sagen, dass Sie es versucht haben, also was hat vorher nicht funktioniert?

Das "Server-Tag ist nicht gut geformt" ist, weil Sie versuchen, doppelte Anführungszeichen in doppelten Anführungszeichen zu verwenden. Ändern Sie die äußere in einfache Anführungszeichen:

Grundsätzlich können Sie ähnliche Angebotstypen nicht verschachteln. Inline-Skripte erfordern in der Regel die Verwendung von Anführungszeichen, da einfache Anführungszeichen in C# eine andere Bedeutung haben. Sie können jedoch auch doppelte oder einzelne Ausdrücke für das Markup-Parameter-Quoting verwenden. Das Ergebnis ist, dass wenn Sie ein Inline-Skript benötigen, verwenden Sie einfache Anführungszeichen, um den Markup-Parameter zu umbrechen, der es Ihnen ermöglicht, doppelte Anführungszeichen darin zu verwenden.

Wenn Sie weitere einfache Anführungszeichen in der Ausgabe benötigen, z. Um einen JavaScript-Parameter zu rendern, verwenden Sie einfach &#39;. Sie könnten auch &#34; verwenden, wenn Sie doppelte Anführungszeichen darstellen möchten.

OnClientClick='openDiv(&#39;EditItem(<%# Eval("something") %>&#39;);' 
+0

beibehalten wurden: – Michel

+0

, aber ich habe das auch mit dem Zitat/Doppelzitat behoben, danke! Ich denke, das Problem ist, dass ich im Onclick-Event 3 Arten von Anführungszeichen brauche: "onclick = openDiv ('EditItem <% # Eval (" Texttranslations_key ")%>')" weil ich vor dem Onclick, vor dem EditItem und den Anführungszeichen brauche In der Eval-Anweisung – Michel

+0

ist Ihr Code-Snippet nicht sichtbar, setzen Sie es in Anführungszeichen, um es in einem Kommentar anzuzeigen. –