首先还是头一看见委托竟然可以在方法中做参数使用,然后就是ApplyActionToCheckedFeedback中传入的是FeedbackItem不是FeedbackAction。最奇怪的也就是FeedbackItem.Delete方法,在后面action(feedbackItem)这行代码这里被执行了;FeedbackItem.Delete的完整定义是public static void Delete(FeedbackItem feedback)。Delete为什么在action(feedbackItem)后会运行,委托?这么委托真的是不明白,从没见过。 protected void OnDeleteClick(object sender, System.EventArgs e)
{
if (ApplyActionToCheckedFeedback(FeedbackItem.Delete) == 0)
{
Messages.ShowMessage("Nothing was selected to be deleted.", true);
return;
}
BindList();
}
private int ApplyActionToCheckedFeedback(FeedbackAction action)
{
int actionsApplied = 0;
foreach(RepeaterItem item in this.rprSelectionList.Items)
{
// Get the checkbox from the item or the alternating item.
CheckBox deleteCheck = item.FindControl("chkDelete") as CheckBox;
if(deleteCheck == null)
{
deleteCheck = item.FindControl("chkDeleteAlt") as CheckBox;
} if(deleteCheck != null && deleteCheck.Checked)
{
// Get the FeedbackId from the item or the alternating item.
HtmlInputHidden feedbackId = item.FindControl("FeedbackId") as HtmlInputHidden;
if(feedbackId == null)
{
feedbackId = item.FindControl("FeedbackIdAlt") as HtmlInputHidden;
} int id;
if(int.TryParse(feedbackId.Value, out id))
{
FeedbackItem feedbackItem = FeedbackItem.Get(id);
if (feedbackItem != null)
{
actionsApplied++;
action(feedbackItem);
}
}
}
}
return actionsApplied;
} delegate void FeedbackAction(FeedbackItem feedback);