首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重写Sharepoint的呈现方法是否完成了与重写CreateChildControls相同的任务?

重写Sharepoint的呈现方法是否完成了与重写CreateChildControls相同的任务?
EN

Stack Overflow用户
提问于 2015-03-23 16:48:10
回答 1查看 221关注 0票数 0

根据我所读到的(我对SP还不熟悉),ISTM认为CreateChildControls()是向WebPart (La)动态添加控件的首选方法:

代码语言:javascript
复制
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():

代码语言:javascript
复制
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);
    }
}

然后,...which调用一个自定义方法来使HTML呈现:

代码语言:javascript
复制
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()所示?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-24 11:59:06

没有一种偏爱的方式,它们是为了不同的目的。

有关ASP.NET控件生命周期的概述,请参阅https://msdn.microsoft.com/en-us/library/aa719775(v=vs.71).aspx。它说它适用于.NET 1.1,但仍然与你的问题相关。

CreateChildControls方法使您能够向控件树中添加其他控件,例如在示例中添加textbox和按钮。这会将控件的呈现和回发处理推迟到控件树中的控件。CreateChildControls可以在控件生命周期的任何地方调用。

呈现方法发生在控件生命周期的特定部分,并且只负责呈现HTML。

注意,可以创建一个同时使用CreateChildControls()和Render()的控件。

您的问题提到了SharePoint,这听起来像是在询问安装在SharePoint上的服务器端控件。我提供了用户控件和服务器控件的概述,并给出了在post http://blogs.msdn.com/b/kaevans/archive/2011/04/28/user-controls-and-server-controls-in-sharepoint.aspx中使用http://blogs.msdn.com/b/kaevans/archive/2011/04/28/user-controls-and-server-controls-in-sharepoint.aspx()的示例。但是,不建议在SharePoint 2013中使用这种方法,建议您将开发转移到应用程序模型.在这种情况下,您不仅限于SharePoint使用ASP.NET窗体模型,还可以使用其他模型,如ASP.NET MVC,甚至其他平台,如PHP、Node.js、Java等。有关应用模型的更多信息,请参见http://dev.office.com

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29215773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档