在OnClientClick代码中包含eval/bind值

7

我需要从gridview(VS 2005/2008)打开弹出详细窗口。 我想要做的是在我的TemplateColumn标记中有一个asp:Button控件,像这样:

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

当然,不起作用的是将<%# Eval...%>部分附加到设置查询字符串变量的过程中。
有什么建议吗?或者有更好的方法来实现相同的结果吗?
3个回答

13

我相信做到这点的方法是

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

我喜欢将其放在标记中,以避免在代码中添加这样一个小操作而使代码混乱。我尽可能避免使用FindControl,因为它不是很快。 - Tom Ritter
我总是在 asp 控件内部使用这种方法遇到麻烦。但是,如果它能够正常工作,那就用吧。 - EndangeredMassa
一个警告 - 问题涉及Eval和Bind,但这种方法只适用于Eval。Bind在内部处理方式不同,并且不允许这样的结构。 - Andrei

2
我喜欢@AviewAnew的建议,但你也可以通过将事件与网格视图的ItemDataBound事件连接来从代码后台编写它。然后,您将使用事件参数上的FindControl方法来获取对按钮的引用,并将onclick属性设置为window.open语句。

2

请在代码后台完成此操作。只需为gridview_RowDataBound使用事件处理程序即可。(我的示例使用id为"gvBoxes"的gridview。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接