C# 对于DIV,Page.FindControl返回null
我有一个动态创建div控件并自动编号的页面C# 对于DIV,Page.FindControl返回null,c#,asp.net,html,C#,Asp.net,Html,我有一个动态创建div控件并自动编号的页面 subCell = new TableCell(); subCell.Controls.Add(new LiteralControl( "<div id=\"picker" + Index.ToString() + "\" runat=\"server\" class=\"colorSelector\"><div style=\"background-color: #000000;\">Text &
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);
在这些代码行之后,我得到一个空对象引用错误。
div为空。
我已经尝试将HtmlControl和LiteralControl作为对象类型,但这也没有帮助
谢谢大家! Page.FindControl仅适用于服务器控件。您正在为文本控件中的文本分配一个id,该控件恰好是一个div,而不是控件本身。如果您设置控件的id,您应该能够找到它,但我不知道您是否打算这样做 为了回应您的评论,请检查您的HTML。runat=server可能会出现,因为ASP.NET没有将其作为控件处理,而是将其作为内容处理。请尝试类似的操作,注意Page.FindControl仅适用于直接子级。在这里,我在aspx中声明了一个名为“declaredPanel”的服务器面板。Static使得ASP.NET不会将父名称添加到控件中(如“MainContent\u childPanel”)
在页面加载中:
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"
Panel p=新面板();
p、 样式[“背景色”]=“aaeeaa”;
p、 ID=“childPanel”;
p、 clientdmode=System.Web.UI.clientdmode.Static;
p、 添加(新的LiteralControl(“你好,世界!”);
declaredPanel.Controls.Add(p);
Panel p2=declaredPanel.FindControl(“childPanel”)作为面板;
字符串colorCode=p2。样式[“背景色”];//报告“#aaeeaa”
产生以下结果:
<div id="declaredPanel">
<div id="childPanel" style="background-color:#aaeeaa;">
<div id="div111" runat="server">Hello, world!</div>
</div>
</div>
你好,世界!
您必须在OnInit事件和回发事件中添加动态控件。如果不是-所有控件在回发时都不可见
创建动态控件时请注意
在Web窗体上,控件必须是
创建并添加到控件中
在OnInit中或在
页面将加载事件。否则
控件的行为异常
使用面板而不是文字控件。它将被呈现为DIV,并由
FindControl
通过其ID找到。您找不到该DIV,因为它被“包装”在LiteralControl中。在当前控件中搜索具有给定ID的控件(runat=server
)。请记住FindControl
不会递归查找元素(例如,在页面上的所有表格单元格中)
看看这里有没有 尝试以下操作:
LiteralControl literalControl = new LiteralControl();
literalControl.ID = "divLiteralControl";
literalControl.Text = ...
subCell.Controls.Add(literalControl);
然后使用FindControl方法获取文本控件并编辑其文本
LiteralControl literalControl =
(LiteralControl) subCell.FindControl("divLiteralControl");
literalControl.Text = ...
+1.此外,div不是一个控件,也没有发布到服务器。但是添加runat=“server”不会使它成为一个服务器控件吗?我可以直接访问控制吗?
LiteralControl literalControl = new LiteralControl();
literalControl.ID = "divLiteralControl";
literalControl.Text = ...
subCell.Controls.Add(literalControl);
LiteralControl literalControl =
(LiteralControl) subCell.FindControl("divLiteralControl");
literalControl.Text = ...