【问题标题】:Including eval / bind values in OnClientClick code在 OnClientClick 代码中包含 eval / bind 值
【发布时间】:2010-09-11 06:25:57
【问题描述】:

我需要从网格视图(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');"   

当然,不工作的是附加 部分来设置查询字符串变量。

有什么建议吗?还是有更好的方法来达到同样的效果?

【问题讨论】:

    标签: asp.net javascript visual-studio


    【解决方案1】:

    我相信这样做的方法是

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

    【讨论】:

    • 我喜欢在标记中这样做,以避免这样一个小操作的代码隐藏混乱。我也尽可能避免使用 FindControl,因为它不是很快。
    • 我在 ASP 控件中总是遇到这种方法的问题。但是,如果它有效,那就去吧。
    • 一个警告 - 问题询问 Eval 和 Bind,但这种方法仅适用于 Eval。 Bind 在内部以不同方式处理,并且不允许这样的构造
    【解决方案2】:

    我喜欢@AviewAnew 的建议,尽管您也可以通过将事件连接到网格视图ItemDataBound 事件从代码隐藏中编写它。然后,您将在事件 args 上使用 FindControl 方法来获取对按钮的引用,并将 onclick 属性设置为您的 window.open 语句。

    【讨论】:

      【解决方案3】:

      在代码隐藏中执行此操作。只需为 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多