У меня есть страница, где я динамически добавляю ImageButtons. Я сначала установил OnClientClick
кнопок, чтобы просто показать всплывающее окно увеличенного изображения и вернуть false для отсутствия обратной передачи.Динамически добавленное событие команды ImageButton не запускается до второго щелчка
У меня есть кнопка на странице, чтобы установить «основное изображение», поэтому, когда эта кнопка нажата, я устанавливаю свойство под названием _IsSettingPrimaryPhotoMode = true
, вызываю функцию для воссоздания ImageButtons и при создании ImageButtons, если это свойство истинно вместо добавления OnClientClick
, я подключаю CommandEventHandler
, поэтому могу указать, на какую кнопку щелкнули, прочитав CommandArgument
.
Проблема заключается в том, что обработчик события не запускается при первом щелчке изображения, а только на втором щелчке и после этого. Я также переместил код с Page_Load
в OnInit
, и я загружаю ImageButtons на каждый ответ.
Я сохраняю _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
Почему вы вызываете _LoadGalleryImages() при нажатии кнопки и другом событии? –