ASP.net .FindControl() 和 GridView 返回 null
Posted
技术标签:
【中文标题】ASP.net .FindControl() 和 GridView 返回 null【英文标题】:ASP.net .FindControl() and GridView returning null 【发布时间】:2012-10-31 11:18:07 【问题描述】:我已经查看了网站上的页面,但似乎找不到适合我的问题的一般性内容,所以希望有人知道该怎么做。我正在调试其他人编写的一些代码,并且遇到了 GridView 语句的问题。
我的问题是我的 gridview 总是为空。我在 LoginView 中的面板中有一个声明的 GridView,基本上设置如下。
<asp:LoginView ID="LoginView1" runat="server" onviewchanged="LoginView1_ViewChanged">
<AnonymousTemplate> Please <a href="../Default.aspx"> Log In </a></AnonymousTemplate>
<LoggedInTemplate>
<asp:Panel ID="Panel1" runat="server">
<asp:GridView ID="GridView1" runat="server"
AutoGenerateColumns="False" CellPadding="2"
DataSourceID="SqlDataSource1" ForeColor="Black" GridLines="Horizontal"
BackColor="White" BorderColor="#CCCCCC" BorderStyle="None"
BorderWidth="1px" Width="970px" OnRowCommand="GridView1_RowCommand"
PageSize="40" AllowSorting="True">
之后,在一个 C# 文件中,我有以下语句
GridView GridView1 = (GridView)LoginView1.FindControl("GridView1");
当我去运行代码时,我在 GridView1 上得到 NullRefrenceException。我是否需要深入到面板中重新引用 GridView,或者我应该能够从主 LoginView1 段访问它?
编辑:更改了我的代码 sn-p 以包含匿名模板的信息
【问题讨论】:
你做的时候登录了吗?匿名模板中有什么? 匿名模板只是一个登录屏幕。所有的工作都是通过登录视图完成的 【参考方案1】:查找子控件的控件是一个经常出现的问题。您可以考虑一种扩展方法,以便您可以轻松调用 Jeff Atwood 的递归子控件(如 Simon 的回答中所引用的)......或您编写的任何版本。这只是使用其他帖子中的代码的示例:
GridView GridView1 = (GridView)LoginView1.FindControlRecursive("GridView1");
这是代码。
public static class WebControlExtender
public static Control FindControlRecursive(this Control root, string id)
if (root.ID == id)
return root;
foreach (Control c in root.Controls)
Control t = FindControlRecursive(c, id);
if (t != null)
return t;
return null;
【讨论】:
好吧,这似乎解决了我的问题。非常感谢 其实好像不行。我已经实现了代码,但它似乎总是返回 null,因为我仍然遇到 null 异常问题。 你从来没有回答我的其他问题。你在做的时候登录了吗?匿名模板中有什么?如果您没有登录,那么是的,它将为空。 对不起,我刚来回答这个问题。匿名屏幕只是一个登录屏幕。当我去调试页面时,gridview为null,页面不会加载进行调试,所以它甚至没有给我登录的机会。 如果您没有登录,登录的模板将不存在。将该代码粘贴到您的匿名模板中,您会看到它有效。如果你把你的代码贴在有问题的地方会有帮助。【参考方案2】:FindControl
只会检查您正在使用它的控件的直接后代。它不会通过 childrens-children 递归地工作。
Jeff Atwood 实际上在博客上写过这个 aaaaggeesss:
http://www.codinghorror.com/blog/2005/06/recursive-pagefindcontrol.html
【讨论】:
以上是关于ASP.net .FindControl() 和 GridView 返回 null的主要内容,如果未能解决你的问题,请参考以下文章
关键字“JOIN”附近的语法不正确。使用 asp.net [重复]
asp.net gridview编辑时,下拉框选择上默认的选项