在绑定转发器时将javascript添加到链接的OnClientClick属性

时间:2009-04-22 12:19:22

标签: c# asp.net javascript

我试图让这个工作但没有成功:

<asp:Repeater ID="Repeater1" runat="server" OnItemCommand="btnDeleteFamily_Click">
 <HeaderTemplate>
    <table>
       <tr>
          <th width="90" valign="top"><%=getTag("name")%></th>
       </tr>
 </HeaderTemplate>
 <ItemTemplate>
       <tr>
       <td><%#Eval("chrname")%></td>
           <asp:LinkButton ID="btnDeleteFamily" CssClass="fRight ui-icon ui-icon-trash" runat="server" CommandName="delete" CommandArgument='<%#Eval("idmember")%>' OnClientClick='return confirm("<%= getTag("deletefamilymemberdialog") %>")' Text="" ValidationGroup="delete_family" />
       </td>
       </tr>
  </ItemTemplate>
  <FooterTemplate>
     </table>
  </FooterTemplate>
</asp:Repeater>

单击btnDeleteFamily OnClientClick时,不会显示确认对话框。

getTag(后面的代码中的方法)用于本地化以获取取决于语言的文本。我的目的是在JavaScript对话框中显示该消息,但我得到了:

<a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$rptFamily$ctl01$btnDeleteFamily','')" class="fRight ui-icon ui-icon-trash" id="ctl00_ContentPlaceHolder1_rptFamily_ctl01_btnDeleteFamily" onclick='return confirm("<%= getTag("deletefamilymemberdialog") %>");'/>

所以它不是在服务器端处理getTag,否则我会得到

onclick='return confirm("Are you sure that you want to delete this entry?");'

由于

4 个答案:

答案 0 :(得分:1)

我认为将邮件作为javascript变量写入页面是一个更好的解决方案:

<script>
   var deleteMemberDialogMessage = '<%= getTag("deletefamilymemberdialog") %>';
</script>

你的转发器:

<asp:LinkButton ID="btnDeleteFamily" CssClass="fRight ui-icon ui-icon-trash"
    runat="server" CommandName="delete" CommandArgument='<%#Eval("idmember")%>' 
    OnClientClick='return confirm(deleteMemberDialogMessage)' Text="" 
    ValidationGroup="delete_family" />

顺便说一下,确保你的deletefamilymemberdialog消息没有单引号。

编辑:如果要将数据源中的值绑定到转发器,则应将列绑定到控件而不是Response.Write(&lt;%=),如下所示:

<asp:LinkButton ID="btnDeleteFamily" CssClass="fRight ui-icon ui-icon-trash"
 runat="server" CommandName="delete" CommandArgument='<%#Eval("idmember")%>' 
OnClientClick='<%# Bind("return confirm('{0}');'", "YourColumnName") %> Text="" 
ValidationGroup="delete_family" />

答案 1 :(得分:1)

protected void Repeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    LinkButton lb = e.Item.FindControl("btnDelete") as LinkButton;
    if (lb != mull) {
         lb.OnClientClick = "whatever";
     }
}

答案 2 :(得分:0)

至少对我来说似乎没问题。

您可以在firefox中试用它,使用WebDeveloper工具栏或Firebug扩展程序,您将能够获得有关场景背后发生的事情的更多信息。

页面上可能还有其他错误,不允许此代码生效。

答案 3 :(得分:0)

如果要在确认模式下使用jQuery对话框绑定到更新面板内转发器上的链接按钮,并且确认后要执行的代码对于每一行都不同,可以这样设置:

为您的页面/控件添加一个javascript函数,如下所示:

function confirm(buttonFunctionForPostBack)
{
    $("#dialog").dialog('option', 'buttons', { 
              "Cancel": function() { 
                  $(this).dialog("close"); 
              },
              "Delete Payment": function () { 
                  eval(buttonFunctionForPostBack); 
                  $(this).dialog("close"); 
                  }
              }
    ).dialog('open');
}

在您的代码中:

public void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    LinkButton lb = e.Item.FindControl("deleteButton") as LinkButton;
    if (lb != null)
    {
        lb.OnClientClick = "confirm(\"" + this.Page.ClientScript.GetPostBackEventReference(lb, string.Empty) + "\");return false;";
    }
}

在你的aspx页面中:

<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
  <HeaderTemplate>
    <table>
       <tr>
          <th width="90" valign="top"></th>
       </tr>
 </HeaderTemplate>
 <ItemTemplate>
       <tr>
         <td><%#Eval("name")%></td>
         <td><asp:LinkButton ID="deleteButton" runat="server" CommandName="delete" CommandArgument='<%#Eval("id")%>' Text="Delete" />
         </td>
       </tr>
  </ItemTemplate>
  <FooterTemplate>
     </table>
  </FooterTemplate>
</asp:Repeater>

这使您可以利用在创建对话框后可以设置对话框的“按钮”选项这一事实。此外,它不需要任何额外的脚本变量。