0

我在后面的代码中有这段代码:

if (Request.QueryString["category"] == "9")
{
    HtmlControl downloadableProducts = (HtmlControl)Page.FindControl("downloadableProducts");
    downloadableProducts.Style.Add("display", "none");
}

它正在生成以下错误:

System.NullReferenceException:对象引用未设置为对象的实例。在第 43 行,这是这个downloadableProducts.Style.Add("display", "none");

我的 div 看起来像这样:

<div id="downloadableProducts" runat="server">
    <a href="#">Downloadedable Products</a>
</div>

我究竟做错了什么?

如果我从后面的代码中删除这一行:

HtmlControl downloadableProducts = (HtmlControl)Page.FindControl("downloadableProducts");

我收到此错误:

当前上下文中不存在名称“downloadableProducts”

4

2 回答 2

0

看起来您的 DIV 是直接在 ASPX 文件 ( <div id="downloadableProducts" runat="server">) 中定义的。因此,您根本不需要打电话FindControl()this.downloadableProducts应该让您直接访问控件。

注意:这假设控件是在与代码隐藏相同的类中定义的。例如,您的 DIV 定义在 中Foobar.aspx,而您正在编写代码Foobar.aspx.cs。(这两个文件组成一个类Foobar:)

相反,如果您的 DIV 定义在 中Fred.ascx,您将无法直接从Barney.ascx.cs文件中访问它。(这两个文件定义了两个不同的类:FredBarney

于 2012-06-04T20:24:52.223 回答
0

由于 downloadableProducts 已经在服务器上运行,您应该可以删除第 42 行。我在下面将其注释掉:

if (Request.QueryString["category"] == "9")
{
    //HtmlControl downloadableProducts  = HtmlControl)Page.FindControl("downloadableProducts");
    downloadableProducts.Style.Add("display", "none");
 }

这对我有用...

于 2012-06-04T20:22:26.240 回答