ASP.NET中如何在OnClick事件中传递Int类型参数
嘿,我看你在尝试给ImageButton的OnClick事件传递int类型参数时踩了个小坑,咱们来一步步把它搞定~
你的代码问题所在
你前台代码里用了Eval("index"),但这个index是页面代码块里定义的循环变量,Eval方法是专门用来绑定数据源字段的(比如GridView、Repeater这类数据绑定控件里用),不是用来直接输出页面局部变量的,所以这会导致CommandArgument无法正确获取到index的值。
修正后的前台代码
把CommandArgument='<%=Eval("index")%>'改成直接输出循环变量的写法CommandArgument='<%= index %>',完整代码如下:
<% for (int index = 0; index < UploadDocs.Count;index++ ) { %> <asp:ImageButton runat="server" Visible="false" CommandArgument='<%= index %>' ID="Btn_RemoveOtherPJ" ImageUrl="~/Images/W4_remove.gif" OnClick="RemoveAttachedDoc_Button_Click" /> <%}%>
后台事件处理代码
在OnClick事件里,你只需要把触发事件的sender转换成ImageButton,然后获取它的CommandArgument并转成int类型就可以了,这里推荐用int.TryParse来避免转换失败的异常:
protected void RemoveAttachedDoc_Button_Click(object source, EventArgs e) { try { // 将触发事件的控件转换为ImageButton ImageButton removeBtn = source as ImageButton; if (removeBtn != null) { // 解析CommandArgument为int类型 if (int.TryParse(removeBtn.CommandArgument, out int docIndex)) { // 这里就可以使用docIndex这个int参数执行你的业务逻辑了 // 示例:移除UploadDocs中对应索引的文档 // UploadDocs.RemoveAt(docIndex); } } } catch (Exception ex) { // 根据你的需求处理异常 } }
额外小提示
如果后续你是在**数据绑定控件(比如Repeater、GridView)**里实现类似功能,那才需要用<%# Eval("你的数据源字段名") %>的写法,但你当前是直接用for循环遍历集合,直接输出循环变量就完全够用啦。
内容的提问来源于stack exchange,提问作者ZZZUnbanned
相关产品推荐
相关产品推荐

