c# - Page.FindControl 为 DIV 返回 null

标签 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></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/

相关文章:

javascript - 在一页上 Bootstrap 多个轮播

html - 模板中的 bson.ObjectId

c# - ASP.NET 4.0 网络表单路由

c# - 在 C# 中将字符串加密为 URL

c# - COM:当我将 COM 变量放入方法中时,引用计数器会增加吗?

c# - 用于加速站点的线程池

c# - 将用户踢出应用程序

asp.net - Entity Framework 第一次加载非常慢

asp.net - 允许 MVC 中的静态内容使用 CORS

javascript - 如何使用 JavaScript 将 html 从某个位置提取到另一个位置并向其添加属性?