Программно добавить ScriptManager - PullRequest
0 голосов
/ 07 марта 2012

Я пытаюсь добавить элемент управления ScriptManager программно, но только если его нет на странице. Я нашел много примеров для этого, которые помещают логику в Page_Init, что имеет смысл (с тех пор понял, что не имеет смысл - см. Правку снизу), но я получаю исключение перед моим Init метод когда-либо поражен.

protected void Page_Init(object sender, EventArgs e)
{
    if (ScriptManager.GetCurrent(Page) == null)
    {
        ScriptManager sMgr = new ScriptManager();
        Page.Form.Controls.AddAt(0, sMgr);
    }
}

Это заставляет меня думать, что Sitecore как-то мешает. Кто-нибудь успешно сделал это с помощью Sitecore?

Спасибо.

РЕДАКТИРОВАТЬ: Исключение я получаю следующим образом: «Элемент управления с идентификатором filtersUpdatePanel требует наличия ScriptManager на странице. ScriptManager должен появляться перед любыми элементами управления, которым он необходим."

РЕДАКТИРОВАТЬ ^ 2: На самом деле здесь происходило то, что Page_Init слишком поздно в жизненном цикле подключить ScriptManager (в моем случае). При использовании Init сначала запускаются все дочерние события, а затем Page. Инициатор UpdatePanel не увидел ScriptManager, поэтому он выдал исключение. Помещение логики ScriptManager в инициализацию UpdatePanel решило проблему.

1 Ответ

2 голосов
/ 08 марта 2012

Обычно я создаю элемент управления PlaceHolder в моей базовой компоновке. Затем в моем Page_Init (или в Init элемента управления, который требует ScriptManager, например UpdatePanel), я помещаю следующий код:

if (ScriptManager.GetCurrent(this.Page) == null)
{
    ScriptManager scriptManager = new ScriptManager
    {
        ID = String.Concat("ScriptManager", DateTime.Now.Date.Ticks),
        EnablePartialRendering = true,
        ScriptMode = ScriptMode.Release
    };

    var placeholder = this.Page.FindControl("PlaceHolderScriptManager") as PlaceHolder;

    if (placeholder != null)
    {
        placeholder.Controls.Add(scriptManager);
    }
}

Я немного изменил его без тестирования, но он должен работать нормально.

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