Выполняет ли переопределение метода Render Sharepoint то же самое, что переопределение CreateChildControls?

Основываясь на том, что я прочитал (я новичок в SP), ISTM, который CreateChildControls (), является предпочтительным методом для динамического добавления элементов управления в WebPart, а именно:

protected override void CreateChildControls()
{
    base.CreateChildControls();

    lbl = new Label();
    lbl.Text = "Look at this";
    this.Controls.Add(lbl);

    tb = new TextBox();
    this.Controls.Add(tb);

    btnSave = new Button();
    btnSave.Width = new Unit(50, UnitType.Pixel);
    btnSave.Text = "Click me if you dare";
    btnSave.Click += new EventHandler(btnSave_Click);
    this.Controls.Add(btnSave);
}

Однако в устаревшем коде я вижу, что CreateChildControls () не используется; вместо этого я вижу такой код, переопределяющий Render ():

protected override void Render(HtmlTextWriter output)
{
    try
    {
        List<Announcement> announcements = getAnnouncements(AnnouncementsList);
        if (announcements.Count > 0)
            output.Write(makeHTML(announcements));
    }
    catch (Exception e)
    {
        output.Write("Exception: " + e.Message);
    }
}

... который затем вызывает пользовательский метод для визуализации HTML:

protected string makeHTML(List<Announcement> announcementList)
{
    string r = "<div class='platypus-announcements-panel'>";
    r += "<h2 class='platypus-white-panel-title'>" + Header + "</h2>";
    r += "<dl>";
    foreach (Announcement curr in announcementList)
    {
        r += "<dt>" + curr.date.ToString("MMM") + "<strong>" + curr.date.Day + "</strong>" + curr.date.ToString("yyyy") + "</dt>";
        r += "<dd>" + curr.content + "</dd>";
    }
    r += "</dl>";
    r += "</div>";
    return r;
}

Является ли непосредственное добавление HTML таким способом предпочтительнее динамического создания элементов управления, как показано выше в CreateChildControls()?

1 ответ

Решение

Там не предпочтение так или иначе, они для разных целей.

Обзор жизненного цикла элемента управления ASP.NET см. По https://msdn.microsoft.com/en-us/library/aa719775(v=vs.71).aspx. Он говорит, что это для.NET 1.1, но все еще имеет отношение к вашему вопросу.

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

Метод Render происходит в определенной части жизненного цикла элемента управления и отвечает только за отображение HTML.

Обратите внимание, что можно создать элемент управления, который использует CreateChildControls() и Render().

В вашем вопросе упоминается SharePoint. Похоже, вы спрашиваете об элементах управления на стороне сервера, установленных в SharePoint. Я предоставляю обзор пользовательских элементов управления и серверных элементов управления с примером использования CreateChildControls() в посте http://blogs.msdn.com/b/kaevans/archive/2011/04/28/user-controls-and-server-controls-in-sharepoint.aspx. Однако этот подход не рекомендуется для SharePoint 2013, рекомендуется перенести разработку на модель приложения... в этом случае вы не ограничены использованием SharePoint модели ASP.NET Forms, вы можете использовать другие модели, такие как ASP.NET MVC или даже другие платформы, такие как PHP, Node.js, Java и т. Д. См. http://dev.office.com/ для получения дополнительной информации о модели приложения.

Другие вопросы по тегам