5

嘿嘿。

我在 index.aspx 页面中有这样的 div

<div id="MainDiv" runat="server">

我正在从服务器端(在运行时)创建 div

 for (Int32 i = 0; i < 4; i++)
    {

        //Create here divFinal
        HtmlGenericControl divFinal = new HtmlGenericControl("div");
        divFinal.ID = i.ToString();

        divFinal.Attributes.Add("class", "column");


        mainDiv.Controls.Add(divFinal);
        //add to maindiv


        HtmlGenericControl div = new HtmlGenericControl("div");
        div.ID = "t_e_" + i.ToString() + "_a";
        div.Style["background-color"] = "#CFD8E6";
        div.Attributes.Add("class", "grid");
        div.Attributes.Add("onclick", "OnMouseDownDiv(this)");

        div.Attributes.Add("onmouseover", "OnMouseDown(this)");
        div.Attributes.Add("onmouseout", "OnMouseUp(this)");
        divFinal.Controls.Add(div);

        // add to dvfinal


    }

在生成评分后,它在 HTML 表单中看起来像这样

 <div id="mainDiv"><div id="0" class="column"><div id="t_e_0_a"></div></div><div id="1" class="column"><div id="t_e_1_a"></div></div></div>

现在我需要在主 Divdiv 中找到 div id t_e_0_a。

HtmlGenericControl div = 
    ((HtmlGenericControl)showdiv.FindControl("0")); 

但它给我错误....

4

2 回答 2

3

你不能像你想要的那样做,因为它不是一个控件。您应该runat="server"在其上放置属性,或者您可以通过某种方式获取它showdiv.InnerHtml- 它应该以字符串的形式呈现,您可以使用 .net 的一些 HTML 解析器对其进行解析(例如,此处建议的HTMLAgilityPack

要在运行时创建服务器端控件,您可以使用以下内容:

for (Int32 i = 0; i < 2; i++)
{
        HtmlGenericControl div = new HtmlGenericControl("div");
        div.ID = i.ToString();
        div.InnerHtml = i.ToString();
        div.ClientIDMode = ClientIDMode.Static; //this is for .NET 4.5 only. Required to have ClientID the same as ID.
        showdiv.Controls.Add(div);
}

而且,在添加控件之后,您应该能够使用这样的东西:

HtmlGenericControl div=((HtmlGenericControl)showdiv.FindControl("1"))

获得这些控制。但请记住,必须为每个请求添加这样添加的控件。

于 2012-12-24T06:18:37.570 回答
0

您应该尝试过如何使用递归函数Page.FindControl

private Control getFollowingControl(Control c, string key,out Control returnControl)
{        
    if(c.hasChild)
    {
        foreach(Control item in c.controls)
        {
            getFollowingControl(item,key,out returnControl);
        }
    }
    else
    {
        if(c.Id==key)
        {
            returnControl=c;
            break;
        }

    }
}

现在您可以使用上述 recusive 函数来查找任何深度的任何控件....

Control getThisControl=null;
getFllowingControl(this,"myButton1",out getThisControl);

最后,它将为您提供在 GetThisControl 控件对象中具有 Id="myButton1" 的控件。

于 2012-12-25T13:26:45.057 回答