我在用户控件中的中继器中有一个图像按钮,当我单击它时无法触发 OnItemCommand 事件。它总是给出错误:“......无效的回发或回调参数。使用......启用事件验证”
当我将图像按钮更改为链接按钮时,它不会给我错误,但它仍然不会触发 OnItemCommand 函数。
我找到了一些其他相关的答案(例如How to process events from Buttons inside Repeaters?这 EnableEventValidation 是什么?)但他们都说,“确保你在 if(!Page.IsPostBack ) 堵塞。” 我已经这样做了,但这并没有什么不同。
这是转发器的标记:
<asp:Repeater ID="rptExpenses" OnItemDataBound="rptExpenses_ItemDataBound" OnItemCommand="Button_Command" runat="server" >
<ItemTemplate>
<asp:ImageButton ID="ibDelete" ImageUrl="~/Images/delete.png" CommandName="Delete" runat="server" />
</ItemTemplate>
</asp:Repeater>
这是代码隐藏的一些摘录
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) {
rptExpenses.DataSource = ExpenseIds;
rptExpenses.DataBind();
}
}
protected void rptExpenses_ItemDataBound(object sender, RepeaterItemEventArgs e) {
if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem)) {
var ibDelete = (ImageButton)e.Item.FindControl("ibDelete");
ibDelete.CommandArgument = e.Item.DataItem.ToString();
}
}
protected void Button_Command(object sender, EventArgs e) {
var btn = (IButtonControl)sender;
switch (btn.CommandName) {
case "Delete":
//delete it
break;
}
}