我在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
答案 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
。