转发器控件内的链接按钮的onclick事件在将数据绑定到转发器控件时触发

时间:2011-10-11 00:13:26

标签: asp.net onclick repeater linkbutton

我在Linkbutton控件中有一个Repeater。 我在aspx页面中的代码:

    <asp:LinkButton ID="lnkBtnOpenSuplmnt" runat="server"  
 Text= "OpensupLink"
 OnClientClick='<%# Eval("ClaimId", "return confirm(\"Reopen the assignment for claim {0} to issue a supplement?\")" ) %>'
    OnClick ='<%# lnk_OpenSupplement(Eval("ClaimId"))%>'> 
</asp:LinkButton>

然后在

背后的代码上
protected string lnk_OpenSupplement(object profileId)
        {
            string retStr = "success";
                  .........
            return retStr;

        }

在page_load中:

  repeater.DataSource = recentAssignments;
                    repeater.DataBind();

这里发生的奇怪事情是:在Repeator的数据绑定中,lnk_OpenSupplement方法被触发,这是不需要的功能。我怎么能避免这种情况。或者某些人可以指出我哪里出错了。

提前致谢

BB

3 个答案:

答案 0 :(得分:3)

您正在将该方法的输出数据绑定到OnClick事件。

意思是,你说OnClick = "success",这不是你期望发生的事情。

<%# something %>表示'绑定此元素时执行某些操作并在此处使用返回值'。

我建议你看看如何将命令参数绑定到ItemCommand事件。

以下是一些描述如何执行此操作的文章:

http://ondotnet.com/pub/a/dotnet/2003/03/03/repeater.html

http://www.asp.net/data-access/tutorials/custom-buttons-in-the-datalist-and-repeater-vb

连接事件后,您的按钮将变为:

 <asp:LinkButton ID="lnkBtnOpenSuplmnt" runat="server"  
      Text= "OpensupLink"
      OnClientClick='<%# Eval("ClaimId", "return confirm(\"Reopen the assignment for claim {0} to issue a supplement?\")" ) %>' 
      CommandName="MyCommand" 
      CommandArgument='<%# Eval("ClaimId") %>'>
</asp:LinkButton>

答案 1 :(得分:2)

我认为OnClick的&lt;%#标签正在评估databind上的函数,尝试将其删除并将其更改为:

  OnClick ='lnk_OpenSupplement'

你也必须在服务器端计算出“ClaimId”,但你应该能够使用传递给lnk_OpenSupplement的标准事件参数来做到这一点。

答案 2 :(得分:2)

罪魁祸首是以下几行:

OnClick ='<%# lnk_OpenSupplement(Eval("ClaimId"))%>'>

在数据绑定期间将触发<%# ... %>标记。有效地,代码正在执行的是在数据绑定上执行lnk_OpenSupplement,并将其返回值赋给OnClick