System.Web.UI.HtmlControls.HtmlGenericControl div = (System.Web.UI.HtmlControls.HtmlGenericControl)pnl.Controls[0].FindControl("divMessage");我正在尝试查找类似上面的divMessage,但我得到的结果为空...:
下面是我的div所在的位置。
<mobile:Panel ID="pnl" Runat="server">
<mobile:DeviceSpecific ID="device" runat="server">
<ContentTemplate>
<div id="divMessage" runat="server">test.....</div>
</ContentTemplate>
</mobile:DeviceSpecific>
</mobile:Panel>发布于 2011-03-11 02:42:39
这应该会找到您需要的div:
var div = (HtmlGenericControl)pnl.Controls[0].FindControl("divMessage");我创建了一个新页面,并通过它进行了测试:
<%@ Page Language="C#" Inherits="System.Web.UI.MobileControls.MobilePage" %>
<%@ Register TagPrefix="mobile"
Namespace="System.Web.UI.MobileControls"
Assembly="System.Web.Mobile" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
var div = (HtmlGenericControl)pnl.Controls[0].FindControl("divMessage");
}
</script>
<body>
<mobile:form id="form1" runat="server">
<mobile:panel id="pnl" runat="server">
<mobile:DeviceSpecific ID="device" runat="server">
<Choice>
<ContentTemplate>
<div id="divMessage" runat="server">test.....</div>
</ContentTemplate>
</Choice>
</mobile:DeviceSpecific>
</mobile:panel>
</mobile:form>
</body>
</html>div变量包含所需的控件。
发布于 2011-03-11 02:08:04
查找控件的最简单方法是执行递归搜索,因为您当前的方法可能会由于控件的嵌套方式而失败。
/// <summary>
/// Recursive FindControl method, to search a control and all child
/// controls for a control with the specified ID.
/// </summary>
/// <returns>Control if found or null</returns>
public static Control FindControlRecursive(Control root, string id)
{
if (id == string.Empty)
return null;
if (root.ID == id)
return root;
foreach (Control c in root.Controls)
{
Control t = FindControlRecursive(c, id);
if (t != null)
{
return t;
}
}
return null;
}然后,您可以通过以下方式使用此方法:
HtmlGenericControl div = (HtmlGenericControl) FindControlRecursive(pnl, "divMessage");发布于 2011-03-11 02:05:29
我认为问题是因为pnl控件不包含divMessage。您必须向下迭代包含的控件才能找到它。
https://stackoverflow.com/questions/5263086
复制相似问题