Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对于DIV,Page.FindControl返回null_C#_Asp.net_Html - Fatal编程技术网

C# 对于DIV,Page.FindControl返回null

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 &

我有一个动态创建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);
在这些代码行之后,我得到一个空对象引用错误。 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 = ...