繁体   English   中英

将控件添加到this.Controls.Add(结果控件在页面的开头

[英]Add controls to this.Controls.Add( results controls at the beginning of my page

我正在使用c#asp.net并构建SharePoint可视Web部件。 我有这种方法将一些控件添加到页面:

private string RSSFile = @"http://www.myCompany.com/xml_feed.xml";

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

            // introductionText
            HtmlGenericControl introductionText = new HtmlGenericControl("p");
            introductionText.InnerHtml = "De volgende vacatures staan momenteel open:";
            this.Controls.Add(introductionText);

            // table
            HtmlGenericControl mainTable = new HtmlGenericControl("table");
            mainTable.Attributes.Add("cellpadding", "10");
            HtmlGenericControl tr1 = new HtmlGenericControl("tr");
            Controls.Add(mainTable);
            mainTable.Controls.Add(tr1);

            // header columns
            tr1.InnerHtml = "<th style=\"text-align:left;\">Vacature</th><th style=\"text-align:left;\">Standplaats</th><th style=\"text-align:left;\">Uren</th>";

            // load xml file
            // TODO load from webpart property
            var xmlSource = XElement.Load(RSSFile);

            // get all file elements
            IEnumerable<XElement> q =
                (from c in xmlSource.Descendants("vacature")
                 select c).ToArray();
            // TODO filter on date
            //where (string)c.Element("publish") == "True"
            //orderby c.Element("name").Value, c.Element("version").Value

            // loop into each file element and get values
            foreach (XElement c in q)
            {
                HtmlGenericControl tr2 = new HtmlGenericControl("tr");
                mainTable.Controls.Add(tr2);

                // title with hyperlink
                HtmlGenericControl td1 = new HtmlGenericControl("td");
                td1.Style.Add("vertical-align", "top");
                td1.InnerHtml = string.Format("<a href=\"Home.aspx?vacatureNr={0}\">{1}</a>", c.Element("vacaturenr").Value, c.Element("titel").Value);
                tr2.Controls.Add(td1);

                // location
                HtmlGenericControl td2 = new HtmlGenericControl("td");
                td2.Style.Add("vertical-align", "top");
                td2.InnerHtml = c.Element("regios").Value;
                tr2.Controls.Add(td2);

                // uren
                HtmlGenericControl td3 = new HtmlGenericControl("td");
                td3.Style.Add("vertical-align", "top");
                td3.InnerHtml = string.Concat(c.Element("min_uren").Value, " - ", c.Element("max_uren").Value);
                tr2.Controls.Add(td3);
            }

            this.Controls.Add(new LiteralControl("<br/>"));
        }

就像您看到的一样,我有一个ahref,它被引用到同一页面,并添加了一个查询字符串“ vacatureNr”。 在页面加载中,我检查此“ vacatureNr”是否已填充。 如果已填满,我想在页面上添加其他控件。 它可以工作,但是控件要在方法“ CreateChildControls”中添加的控件之前添加。 如何在“ CreateChildControls”方法中已添加的控件之后添加这些控件?

protected void Page_Load(object sender, EventArgs e)
        {
            string vacatureNr = Request.QueryString["vacatureNr"];
            if(!string.IsNullOrEmpty(vacatureNr))
            {
                this.Controls.Clear();

                HtmlGenericControl table = new HtmlGenericControl("table");
                HtmlGenericControl tr1 = new HtmlGenericControl("tr");
                HtmlGenericControl td1 = new HtmlGenericControl("td");
                HtmlGenericControl td2 = new HtmlGenericControl("td");
                td1.InnerHtml = "<strong>Inzet in uren:</strong>";
                td2.InnerHtml = "24-32";
                tr1.Controls.Add(td1);
                tr1.Controls.Add(td2);
                table.Controls.Add(tr1);

                HtmlGenericControl tr2 = new HtmlGenericControl("tr");
                HtmlGenericControl td3 = new HtmlGenericControl("td");
                HtmlGenericControl td4 = new HtmlGenericControl("td");
                td3.InnerHtml = "<strong>Standplaats:</strong>";
                td4.InnerHtml = "Egmond aan Zee";
                tr2.Controls.Add(td3);
                tr2.Controls.Add(td4);
                table.Controls.Add(tr2);

                HtmlGenericControl tr3 = new HtmlGenericControl("tr");
                HtmlGenericControl td5 = new HtmlGenericControl("td");
                HtmlGenericControl td6 = new HtmlGenericControl("td");
                td5.InnerHtml = "<strong>Aard van dienstverband:</strong>";
                td6.InnerHtml = "Bepaalde tijd";
                tr3.Controls.Add(td5);
                tr3.Controls.Add(td6);
                table.Controls.Add(tr3);

                this.Controls.Add(table);
            }
        }

将始终在Page Load事件之前触发CreateChildControls方法。 而是尝试将逻辑从CreateChildControls移到新方法中,并在Page_Load的末尾调用此方法。

也许可以添加带有protected override void OnPreRender(EventArgs e)的OnPreRender方法的控件,并protected override void OnPreRender(EventArgs e) 我猜这个方法应该在CreateChildControls之后运行。

[编辑]->您可以在与CreateChildControls相同的类上覆盖OnPreRender ...

格尔茨

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM