我有一个简单的ASP.Net页面,并且我通过控件通过反射对控件进行了枚举(本地化页面 - 但这是整个管理员指令的其他功能类型蠕虫)。所以...我有这样一个测试页面:asp.net窗体控件ID在枚举上为空
<%@ Page Title="" Language="C#" MasterPageFile="~/Master Pages/Root.master" AutoEventWireup="true" CodeFile="refelectiontest.aspx.cs" Inherits="refelectiontest" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:Button ID="Button1" runat="server" Text="Button" />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><asp:Label ID="Label2"
runat="server" Text="Label"></asp:Label>
<asp:Label ID="Label3" runat="server" Text="Label"></asp:Label>
</asp:Content>
然后在后面的代码,我想通过控制迭代...
所以我有这个(母版页可以处理本身)
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
try
{
foreach (Control ctrl in Form.Controls)
{
if (ctrl is ContentPlaceHolder)
{
ContentPlaceHolder chp = ctrl as ContentPlaceHolder;
foreach (Control control in chp.Controls)
{
string strID = control.ID;
//do stuff based on the the ID
}
}
}
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
}
}
现在,如果我只是运行这个,它与对象空异常的barfs。如果我遍历代码,在control.ID行上放置一个断点,那么ID实际上是空的。但是,如果我然后扩展控制对象,则ID会自动填充,一切正常。
它看起来像ID只是在最后一刻才完成 - 我怎样才能确保我可以得到的ID不变空? 如果我不使用母版页,会发生同样的事情。 谢谢。
'如果((Ctrl键的ContentPlaceHolder)!= NULL)'?真? – configurator 2011-04-02 16:25:10
是的,试过了。它仍然获得空ID。我的解决方法是确保在使用ID进行某些操作之前检查了null - 证明所有对象的ID都是有效的。 – Manicguitarist 2011-04-04 12:04:59