用FindControl()无法获取控件

时间:2015-08-04 16:47:49

标签: html asp.net webforms findcontrol

我正在使用MasterPage网站。在default.aspx代码隐藏,Page_Load事件中,我创建了许多容器DIV(即每个DIV都是SQL结果):

HtmlGenericControl div = new HtmlGenericControl("div");
div.Attributes.Add("id", "div_" + postid);

然后以编程方式在代码后面创建更多DIV(divBottom)并将其添加到容器DIV中,其中包含以下控件:

LinkButton lnkConfirmo = new LinkButton();
lnkConfirmo.ID = "lnkConfirmo_" + postid;
lnkConfirmo.Text = "Foo";
lnkConfirmo.Click += (sender, e) => { UpdateLabel(sender, e, postid); };

Label lblConfirms = new Label();
lblConfirms.ID = "lblConfirms_" + postid;
lblConfirms.Text = "<small><a href=\"javascript:;\">" + GetConfirmTotal(postid) + " pessoas</a> confirmam.</small>";
lblConfirms.Attributes.Add("runat", "server");

最后将底部div添加到容器中。

div.Controls.Add(divBottom);

在UpdateLabel()方法中,单击LinkBut​​ton时无法更改Label文本。

    public void UpdateLabel(object sender, EventArgs e, int postid)
    {
        object ctl = (this.FindControl("ContentPlaceHolder1_lblConfirms_" + postid.ToString()) as Label);
        HtmlGenericControl ctl2 = (HtmlGenericControl)this.FindControl("ctl00").FindControl("ContentPlaceHolder1").FindControl("lblConfirms_" + postid);
        //I tried more combinations of this.
    }

我尝试使用Label和HtmlGenericControl,因为Label正在渲染为span。

这是Html输出:

<div id="divConfirms_24"><span id="ContentPlaceHolder1_lblConfirms_24" runat="server"><small><a href="javascript:;">190 users</a> confirmam.</small></span></div>

某些控件可用于 this.Page.Form (例如一些div,ContentPlaceHolder,ScriptManager和许多“Literal”),但不是Label,因为它没有呈现为Control,我想。

如何访问该范围以更改其文本,或使其成为可访问的可用控件?

更新:将DIV添加到UpdatePanel,并将其添加到更大的容器中。

UpdatePanel upldivPost = new UpdatePanel();
upldivPost.ContentTemplateContainer.Controls.Add(div);
divPosts.Controls.Add(div);

当它不在UpdatePanel中时,可以通过以下方式访问Label(并在回发后更改):

Label found = (Label)this.FindControl("ctl00").FindControl("ContentPlaceHolder1").FindControl("lblConfirms_" + postid);

0 个答案:

没有答案