我有一个页面,我动态添加ImageButtons。我首先设置了按钮的OnClientClick
,以简单地显示放大图像的弹出窗口,并返回false,无回传。动态添加ImageButton命令事件不会触发,直到第二次点击
我在页面上有一个按钮来设置“主图像”,所以当点击这个按钮时,我设置一个名为_IsSettingPrimaryPhotoMode = true
的属性,调用该函数重新创建ImageButtons,并且在创建ImageButton时,如果此属性为true添加一个OnClientClick
,我连接CommandEventHandler
,所以我可以通过阅读CommandArgument
来分辨哪个按钮被点击了。
问题是事件处理程序不会在第一次点击图像时触发,而只会在第二次点击之后触发。我还将代码从Page_Load
移至OnInit
,并在每次回传中加载ImageButton。我们将_IsSettingPrimaryPhotoMode
保存为Session
。
private bool _IsSettingPrimaryPhotoMode {
get {
bool result = false;
if(Session[ConstantsWeb.Session.IS_DELETE_IMAGE_MODE] != null) {
result = Convert.ToBoolean(Session[ConstantsWeb.Session.IS_SETTING_PRIMARY_IMAGE_MODE]);
}
return result;
}
set {
Session[ConstantsWeb.Session.IS_SETTING_PRIMARY_IMAGE_MODE] = value;
}
}
页的OnInit
protected override void OnInit(EventArgs e) {
base.OnInit(e);
if(!IsPostBack) {
_IsSettingPrimaryPhotoMode = false;
}
_LoadGalleryImages();
}
}
的_LoadGalleryImages方法
private void _LoadGalleryImages() {
PhotoGalleryImageCollection images = PhotoGalleryImages.GetPhotoGalleryImages();
foreach(PhotoGalleryImage image in images) {
ImageButton displayImage = new ImageButton();
Panel panel = new Panel();
panelPhotoContainer.Controls.Add(panel);
displayImage.ImageUrl = "some URL";
if(!_IsSettingPrimaryPhotoMode) {
displayImage.OnClientClick = "showPopup(); return false;";
}
else {
displayImage.Command += new CommandEventHandler(displayImage_Command);
displayImage.CommandName = "ImageButton" + image.PhotoGalleryImageId.ToString();
displayImage.CommandArgument = image.PhotoGalleryImageId.ToString();
}
panel.Controls.Add(displayImage);
}
}
btnSetPrimaryPhoto_Click
protected void btnSetPrimaryPhoto_Click(object sender, EventArgs e) {
// if I don't call this, duplicate controls will be added since they were added
// from OnInit calling _LoadGalleryImages();
panelPhotoContainer.Controls.Clear();
_IsSettingPrimaryPhotoMode = true;
// reload since _IsSettingPrimaryPhotoMode has now changed
_LoadGalleryImages();
}
我在做什么错?
尝试添加此代码,看看它是否会解决您的问题displayImage.Command - = new CommandEventHandler(displayImage_Command); – MethodMan 2012-02-23 17:43:47
为什么在按钮点击和另一个事件中调用_LoadGalleryImages()? – 2012-02-23 18:42:12