Загрузить управление сервером из сборки и подключить события - PullRequest
0 голосов
/ 04 июля 2011

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

например, элементы управления имеют вид:

[ToolboxData("<{0}:MyPlugin runat=server></{0}:MyPlugin>")]
public class MyPlugin : WebControl, PluginSystem.Interface.IMyPlugins
{
    protected override void RenderContents(HtmlTextWriter output)
    {
        ...
        _btn = new Button();
        _btn.ID = "btnSave";
        this.Controls.Add(_btn);
        _btn.Click += new EventHandler(btn_Click);
        _btn.RenderControl(output);
    }
    void btn_Click(object sender, EventArgs e)
    {
        //do something. This doesn't fire
    }
}

Элементы управления загружаются из их сборок:1006 *

    public static IMyPlugins GetPlugin(string assembly, string type)
    {
        var t = Type.GetType(type + ", " + assembly);
        IMyPlugins rtn = (IMyPlugins)Activator.CreateInstance(t);

        rtn.Initialise();

        return rtn;
    }

Как добавить загруженную сборку на страницу, чтобы сработали события в элементе управления?Это возможно?

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 04 июля 2011

Вы добавляете элементы управления слишком поздно в жизненном цикле страницы.Добавьте серверные элементы управления в событие OnInit Page.

Проверьте эту ссылку для обзора процесса жизненного цикла.Элементы управления должны быть созданы к моменту обработки события обратной передачи. Эта серия также действительно хороша.

Динамическое изменение страницы в зависимости от выбора пользователя может быть проблемой в заднице из-за этого.Есть несколько вариантов.Самый простой способ - добавить все свои элементы управления в OnInit, а затем удалить их, когда вы знаете, какой выбор сделал пользователь.

Если он действительно полностью динамический, и вы не представляете, какой элемент управления вы собираетесь визуализировать допосле того, как обратные передачи были обработаны, может быть легче отойти от системы viewstate / postback ASP.NET и проверить вещи самостоятельно.Вы всегда можете получить полный диапазон значений записей в любое время в жизненном цикле страницы, проверив коллекцию Form.Request.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...