Контроль вызвал пост обратно - PullRequest
0 голосов
/ 02 августа 2011

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

 protected void ResourceTypesDDL_SelectedIndexChanged(object sender, EventArgs e)
    {
        ....
        MyUsercontrol c = new MyUSercontrol(....);
        this.panel.controls.add(c);
    } 

, поэтому я должен поместить код в мой метод onload, но суть в том, как я могу узнать, что именно ddl вызвал пост обратно?есть ли свойство?или я должен использовать page.Request.Params.Get ("__ EVENTTARGET") технику?Большое спасибо!

Ответы [ 3 ]

2 голосов
/ 02 августа 2011

Если ваш MyUserControl действительно пользовательский элемент управления, то есть файл .ascx, вы должны использовать это:

Page.LoadControl("~/Controls/MyUserControl.ascx")

вместо создания экземпляра элемента управления путем непосредственного вызова конструктора.

protected void ResourceTypesDDL_SelectedIndexChanged(object sender, EventArgs e) {
        ....
        var c = Page.LoadControl("~/Controls/MyUserControl.ascx");
        this.panel.controls.add(c); 
}

EDIT:

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

1 голос
/ 02 августа 2011

установить свойство autoPostBack = true в раскрывающемся списке, чтобы страница отправлялась обратно

Или используйте приведенную ниже функцию, чтобы получить контроль обратной записи на page_load

private string GetPostBackControl()
    {
        string retVal = string.Empty;
        try
        {
            string ctrlname = Page.Request.Params.Get("__EVENTTARGET");
            if (ctrlname != null && ctrlname != string.Empty)
            {
                Control ctrl = this.Page.FindControl(ctrlname);
                if (ctrl != null)
                {
                    retVal = ctrl.ID;
                }
            }
        }
        catch (Exception ex) { ManageException(ex, ShowGeneralErrorMessage); }

        return retVal;
    }
0 голосов
/ 02 августа 2011

Попробуйте установить AutoPostBack="True" свойство раскрывающегося списка.После установки этого свойства при выборе элемента в списке он автоматически выполняет обратную передачу, и ваше событие ResourceTypesDDL_SelectedIndexChanged будет запущено.

...