Получить ссылку на событие нажатия кнопки изображения в gridview в модуле http - PullRequest
0 голосов
/ 15 февраля 2012

Как передать событие Click ImageButton внутри GridView в httpmodule для кнопки link, я делаю так:

if (request.Form.GetValues("__EVENTTARGET") != null)
{

    //If it's a link button execute we can directley check for the params 
    if (request.Params.Get("__EVENTTARGET").Contains("xyz"))
    {
        //some Code
    }

Это не работает для ImageButton.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2012

ImageButtons имеют дополнительное квази-свойство в своих именах, которое идентифицирует координаты мыши (X и Y).

Таким образом, чтобы найти имя ImageButton, вы должны перебрать опубликованные параметры инашел те, которые заканчиваются на .x или .y:

foreach (string item in request.Form)
{
    if (item.EndsWith(".x") || item.EndsWith(".y"))
    {
        var controlName = item.Substring(0, item.Length - 2);
        // some code here
    }
}

Вы также можете назвать этот ответ полезным.Он содержит более общий метод для определения того, какой элемент управления вызвал обратную передачу.

0 голосов
/ 15 февраля 2012

Если вы пытаетесь прикрепить событие к кнопке в виде сетки, я мог бы предложить на вашей базовой странице при просмотре события prerender проанализировать все виды сетки на странице (использовать рекурсивный алгоритм findcontrol) и найти любые кнопки изображения, если вы найдете тот, который вы сможете прикрепить к нему событие.

EDIT: Я использую нечто подобное в следующем:

 public abstract class AmendmentPopUpWindow : BaseMasterPlanPage
    {
        // override this method if the correct save controls arent being hidden in the popups
        public virtual IEnumerable<WebControl> SaveControls
        {
            get { return Controls.All().OfType<WebControl>().Where(c => c.ID.ToLower().Contains("save")); }
        }

        protected override void OnPreRender(EventArgs e)
        {
            if (WebConfiguration.Global_EnableAmendments && SystemVersion.HasValue)
            {
                foreach (var control in Controls.All())
                {
                    if (control is RadioButton || control is TextBox || control is DropDownList || control is RadComboBox || control is CheckBox || control is CheckBoxList ||
                        control is RadEditor || control is RadTextBox || control is RadNumericTextBox)
                    {
                        var webControl = control as WebControl;
                        webControl.Enabled = false;
                        webControl.ForeColor = Color.Gray;
                    }
                }

                foreach (var saveControl in SaveControls)
                    saveControl.Visible = false;
            }

            base.OnPreRender(e);
        }

РЕДАКТИРОВАТЬ: .All () является методом расширения, определенным следующим образом (украдено у здесь )

public static IEnumerable<Control> All(this ControlCollection controls)
{
    foreach (Control control in controls)
    {
        foreach (Control grandChild in control.Controls.All())
            yield return grandChild;

        yield return control;
    }
}
...