HtmlGenericControl返回Null

时间:2016-03-11 11:02:07

标签: c# html asp.net master-pages

我需要帮助,我试图设置" display:none"进入"显示:块"在我的div标签中,它位于内容页面中。 当我执行下面的代码时,HtmlGenericControl类继续给出错误"对象引用未设置为对象的实例"因为他无法找到" divSignin" (我的div标签的ID)但它在代码中显示:请帮助。

我的HtmlGenericControl实现有问题吗?

这是我的内容页面中的代码:

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <div class="col-md-4" id="divSignin" style="display:none" runat="server">
    </div>
</asp:Content>

这是我的母版页背后的代码:

protected void lbtnRegister_Click(object sender, EventArgs e)
{
    HtmlGenericControl myObject = Master.FindControl("ContentPlaceHolder1").FindControl("divSignin") as HtmlGenericControl;

   //HtmlGenericControl myObject;
   // myObject = (HtmlGenericControl)ContentPlaceHolder1.FindControl("divSignin");
   // myObject.Style.Add("display", "block");
}

后面的代码中的注释部分是我尝试的另一个返回相同的东西(Null)。

3 个答案:

答案 0 :(得分:2)

你能在下面试试吗,

protected void lbtnRegister_Click(object sender, EventArgs e)
{
    HtmlGenericControl myObject = ContentPlaceHolder1.FindControl("divSignin") as HtmlGenericControl;
}

答案 1 :(得分:1)

如果click事件的处理程序位于MasterPage上,则应使用:

HtmlGenericControl control = this.FindControl("MainContent").FindControl("divSignin") as HtmlGenericControl

如果处理程序位于Page的代码隐藏中,那么你的解决方案就会正常工作。但在这种情况下,你也可以得到这样的控制:

HtmlGenericControl control = this.divSignin;

答案 2 :(得分:1)

所以我找到了问题的答案。我的代码是正确的,后面的代码确实没有错。 只有我创建了一个新的div(请参考下面的html:)

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<div class="col-md-4">
   <div id="someID" runat="server" style="display:block">

   </div>
</div>

这是我在MasterPage中的代码:

protected void lbtnRegister_Click(object sender, EventArgs e)
    {
        HtmlGenericControl myObject = this.FindControl("ContentPlaceHolder1").FindControl("divShow") as HtmlGenericControl;
        myObject.Style.Add("display", "none");
    }

我不确定导致空引用的原因,但我猜测在div中有一个类会导致我的问题。 谢谢你的回复。我感谢您的努力和时间