我有一个页面,我在其中动态创建 div 控件并自动为它们编号。
subCell = new TableCell();
subCell.Controls.Add(new LiteralControl(
"<div id=\"picker" + Index.ToString() + "\" runat=\"server\"
class=\"colorSelector\"><div style=\"background-color: #000000;\">Text
</div></div>"));
subRow.Cells.Add(subCell);
subTb.Rows.Add(subRow);
稍后在代码中我想像这样获取背景颜色值:
HtmlGenericControl div;
div = (HtmlGenericControl)Page.FindControl("picker" + e.CommandArgument.ToString());
string colorCode = div.Style["background-color"].ToString();
在这行代码之后,我得到一个空对象引用错误。 div 为空。 我已经尝试将 HtmlControl 和 LiteralControl 作为对象类型,但都没有帮助。
谢谢!
最佳答案
Page.FindControl 仅适用于服务器控件。您正在为文字控件中的文本分配一个 id,它恰好是一个 div,而不是控件本身。如果您设置控件的 ID,您应该能够找到它,但我不知道这是否是您想要的。
为回应您的评论,请检查您的 HTML。 runat=server 可能会在那里,因为 ASP.NET 没有将它作为控件处理,而是将其作为内容处理。尝试这样的事情,注意 Page.FindControl 仅适用于直系子级。在这里,我在 aspx.xml 文件中声明了一个名为“declaredPanel”的服务器面板。 ClientIdMode.Static 使 ASP.NET 不会将父名称添加到控件(如“MainContent_childPanel”)
<asp:Panel ID="declaredPanel" runat="server" ClientIDMode="Static" />
在 Page_Load 中:
Panel p = new Panel();
p.Style["background-color"] = "#aaeeaa";
p.ID = "childPanel";
p.ClientIDMode = System.Web.UI.ClientIDMode.Static;
p.Controls.Add(new LiteralControl("<div id=\"div111\" runat=\"server\">Hello, world!</div>"));
declaredPanel.Controls.Add(p);
Panel p2 = declaredPanel.FindControl("childPanel") as Panel;
string colorCode = p2.Style["background-color"]; // reports "#aaeeaa"
产生这个:
<div id="declaredPanel">
<div id="childPanel" style="background-color:#aaeeaa;">
<div id="div111" runat="server">Hello, world!</div>
</div>
</div>
关于c# - Page.FindControl 为 DIV 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6197766/