在c#中在服务器端运行时查找div

时间:2012-12-24 06:11:50

标签: c# asp.net html

所有人。

我在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")); 

但它给我错误....

2 个答案:

答案 0 :(得分:3)

你不能像你想要的那样做,因为它不是一个控件。您应该在其上放置runat="server"属性,或者您可以从showdiv.InnerHtml以某种方式获取它 - 在那里它应该显示为一个字符串,您可以使用.net解析一些HTML解析器(例如,{{ 3}}建议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"))

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

答案 1 :(得分: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”的控件。