ユーザー コントロールにあるリピーターにイメージ ボタンがあり、クリックしても OnItemCommand イベントを発生させることができません。常に次のエラーが表示されます:「...無効なポストバックまたはコールバック引数。イベント検証は...を使用して有効になっています
画像ボタンをリンク ボタンに変更すると、エラーは発生しませんが、それでも OnItemCommand 関数は起動しません。
他の関連する回答をいくつか見つけました (たとえば、リピーター内のボタンからイベントを処理する方法は? そして、この 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;
}
}