2008-09-19 3 views
7

Ich muss ein Popup-Detailfenster aus einer Gridview öffnen (VS 2005/2008). Was ich versuche, ist im Markup zu tun für meine Template haben eine asp: Button-Steuerelement, Art wie folgt aus:Einschließen von eval/bind-Werten in OnClientClick-Code

<asp:Button ID="btnShowDetails" runat="server" CausesValidation="false" 
    CommandName="Details" Text="Order Details" 
    onClientClick="window.open('PubsOrderDetails.aspx?OrderId=<%# Eval("order_id") %>', 
    '','scrollbars=yes,resizable=yes, width=350, height=550');" 

Natürlich, was nicht funktioniert das Anfügen des Eval <% # ist. ..%> Abschnitt, um die Abfragezeichenfolgenvariable festzulegen.

Irgendwelche Vorschläge? Oder gibt es einen weitaus besseren Weg, um das gleiche Ergebnis zu erzielen?

Antwort

13

glaube ich, die Art und Weise, es zu tun ist

onClientClick=<%# string.Format("window.open('PubsOrderDetails.aspx?OrderId={0}',scrollbars=yes,resizable=yes, width=350, height=550);", Eval("order_id")) %> 
+0

ich es in der Auszeichnungs gerne tut dem Code-Behind für einen so kleinen Betrieb zu vermeiden unübersichtlich. Ich habe auch die Verwendung von Findcontrol vermeiden, wann immer ich kann, weil es nicht sehr schnell –

+0

Ich habe immer Probleme mit diesem Ansatz in ASP-Steuerelemente.Aber wenn es funktioniert, gehen Sie dafür – EndangeredMassa

+0

Ein Wort der Warnung - Frage fragt nach Eval und Bind, aber dieser Ansatz wird nur für Eval. Bind wird intern anders gehandhabt und lässt solche Konstrukte nicht zu – Andrei

2

Ich mag @AviewAnew ‚s Vorschlag, obwohl Sie auch, dass aus dem schreiben können Code-Behind durch Verdrahtung und Veranstaltung der Rasteransichten ItemDataBound-Ereignis. Sie würden dann die FindControl-Methode für die Ereignisargumente verwenden, die Sie erhalten, um einen Verweis auf Ihre Schaltfläche zu erhalten, und das Attribut onclick auf Ihre window.open-Anweisung setzen.

2

Tun Sie dies in der Code-behind. Verwenden Sie einfach einen Event-Handler für gridview_RowDataBound. (Mein Beispiel verwendet eine Gridview mit der ID von „gvBoxes“.

Private Sub gvBoxes_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvBoxes.RowDataBound 
    Select Case e.Row.RowType 
     Case DataControlRowType.DataRow 
      Dim btn As Button = e.Row.FindControl("btnShowDetails") 
      btn.OnClientClick = "window.open('PubsOrderDetails.aspx?OrderId=" & DataItem.Eval("OrderId") & "','','scrollbars=yes,resizable=yes, width=350, height=550');" 
    End Select 
End Sub 
Verwandte Themen