【问题标题】:Passing variables to javascript in repeater imagebutton onclientclick在repeater imagebutton onclientclick中将变量传递给javascript
【发布时间】:2015-03-28 04:24:11
【问题描述】:

我想将我的动态值从 imagebutton onclientclick 事件传递给 javascript 函数。 如果我像这样传递静态值,它工作正常

<asp:ImageButton ImageUrl="~/Images/control_play_blue.png" ForeColor="Transparent"
                        BorderStyle="None" ToolTip="Chat" runat="server" ID="btnChat" 
                        OnClientClick="javascript:return openWindow('1')" />

但是,如果我尝试如下传递动态值,它将不起作用。

<asp:ImageButton ImageUrl="~/Images/control_play_blue.png" ForeColor="Transparent" BorderStyle="None" ToolTip="Chat" runat="server" ID="btnChat" 
                        OnClientClick="javascript:return openWindow('"+<%#Eval("PujaType") %>+"')" />

我尝试了所有可能的组合,但它说标签格式不正确。 有人可以帮忙吗?

【问题讨论】:

    标签: javascript asp.net


    【解决方案1】:

    不知道 ASP,但在 JSP 中,表达式必须是整个值。试试:

    OnClientClick="<%# "javascript:return openWindow('" + Eval("PujaType") + "')" %>" />
    

    【讨论】:

      【解决方案2】:

      您不需要在 Eval 语句周围进行字符串连接。这样做会创建无效标记。

      改变

      "javascript:return openWindow('"+&lt;%#Eval("PujaType") %&gt;+"')"

      "javascript:return openWindow('&lt;%#Eval("PujaType") %&gt;')"

      <asp:ImageButton    
           ImageUrl="~/Images/control_play_blue.png"ForeColor="Transparent"   
           BorderStyle="None" ToolTip="Chat" runat="server" ID="btnChat" 
           OnClientClick="javascript:return openWindow('<%#Eval("PujaType") %>')" />
      

      【讨论】:

        【解决方案3】:

        我使用 ASP.NET 已经有一段时间了,目前无法对此进行测试,但我似乎记得它在包装 &lt;%# %&gt; 时需要单引号。

        类似这样的:

        <asp:ImageButton ImageUrl="~/Images/control_play_blue.png" ForeColor="Transparent"
                                BorderStyle="None" ToolTip="Chat" runat="server" ID="btnChat" 
                                OnClientClick='<%# "javascript:return openWindow('" + Eval("PujaType") + "')" %>' />
        

        this question 上的一些答案建议相同。


        另一种方法是在后面的代码中设置值。假设您在重复器或类似的东西中使用此控件,您应该能够在数据绑定期间设置值,如下所示:

        void R1_ItemDataBound(Object Sender, RepeaterItemEventArgs e) {
        
          if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
        
             String pujaType = ((YourType)e.Item.DataItem).PujaType;
        
             ((ImageButton)e.Item.FindControl("btnChat")).OnClientClick = "javascript:return openWindow('" + pujaType + "')";
          }
        }
        

        Repeater.ItemDataBound Event


        由于您没有使用任何服务器端事件,另一种选择是使用常规 html 而不是 ASP.NET 控件。这可以使用锚点和 img 标签来完成,如下所示:

        <a href="#" onclick="openWindow('<%# Eval("pujaType") %>'); return false;">
          <img src='<%= ResolveUrl("~/Images/control_play_blue.png") %>' />
        </a>
        

        【讨论】:

        • @user2969030 - 查看替代方案
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多