我正在使用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()方法中,单击LinkButton时无法更改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);