[英]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.