在我的asp.net页面中,当单击按钮(getDivsOrder)时,我想通过循环或类似的方式获取mainDiv中div的id。我怎么能这样做?
<ContentTemplate>
<div id="mainDiv" runat="server">
<div id="Red" runat="server"></div>
<div id="Yellow" runat="server"></div>
<div id="Green" runat="server"></div>
...
</div>
<asp:Button ID="getDivsOrder" runat="server" Text="Update label "
onclick="btnHelloWorld_Click" />
</ContentTemplate>
答案 0 :(得分:1)
我编写了以下实用程序方法,您可以将其放入“Utility Toolbelt”类或其他任何内容中。您可以像使用mainDiv.FindControlsOfType<HtmlGenericControl>()
一样使用它来返回控件列表。
/// <summary>
/// Given a root Control, do a recursive search for Controls implementing or deriving from class/interface T
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="ctlRoot"></param>
/// <returns></returns>
public static List<T> FindControlsOfType<T>(this Control ctlRoot)
{
List<T> controlsFound = new List<T>();
if (typeof(T).IsInstanceOfType(ctlRoot))
controlsFound.Add((T)(object)ctlRoot);
foreach (Control ctlTemp in ctlRoot.Controls)
{
controlsFound.AddRange(FindControlsOfType<T>(ctlTemp));
}
return controlsFound;
}
您遇到的问题是div
与任何标准ASP.NET Web控件都不对应,因此必须在搜索中使用HtmlGenericControl
。因此,搜索会选择任意HtmlGenericControl
,而不只是div
元素。因此,您必须查看每个控件的TagName
属性,以确保它绝对是div
。
另外,请注意,在服务器端执行此操作意味着您只检查服务器上的mainDiv
控件的内容和顺序。如果您要更改客户端div的顺序,例如使用jQuery draggable,服务器将无法知道它,除非您使用其他javascript来回发新的div
订单。
答案 1 :(得分:0)
如果您只想要div ids:
foreach (Control c in mainDiv.Controls)
{
if (c is HtmlGenericControl)
{
String id = c.ID;
}
}