2008-09-19 15 views
7

Tengo la necesidad de abrir una ventana emergente de detalle desde una vista de cuadrícula (VS 2005/2008). Lo que estoy tratando de hacer es en el marcado para mis TemplateColumn tienen un asp: control Button, algo así como esto:Incluyendo los valores eval/bind en el código OnClientClick

<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');" 

Por supuesto, lo que no funciona es la Anexión del <% # Eval. ..%> sección para establecer la variable de cadena de consulta.

¿Alguna sugerencia? ¿O hay una forma mucho mejor de lograr el mismo resultado?

Respuesta

13

Creo que la manera de hacerlo es

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

me gusta hacerlo en el marcado para evitar que saturan el código subyacente para una pequeña operación de este tipo. También evito el uso de FindControl siempre que puedo porque es no muy rápido –

+0

Siempre tengo problemas con este enfoque dentro de los controles asp. Pero, si funciona, adelante. – EndangeredMassa

+0

Una palabra de advertencia: pregunta sobre Eval y Bind, pero este enfoque solo funcionará para Eval. Bind se maneja de manera diferente internamente, y no permitirá tales construcciones – Andrei

2

me gusta @AviewAnew 's sugerencia, aunque también puede simplemente escribir que desde el código subyacente cableando y evento para el vistas de cuadrícula Evento ItemDataBound. A continuación, utilizaría el método FindControl en los argumentos de evento para obtener una referencia a su botón y establecer el atributo onclick en su instrucción window.open.

2

Haga esto en el código subyacente. Solo use un controlador de eventos para gridview_RowDataBound. (Mi ejemplo se utiliza un gridview con el id de "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 
Cuestiones relacionadas