所有人。
我在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"));
但它给我错误....
答案 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”的控件。