Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HtmlGenericControl给我一个错误“对象引用未设置为对象的实例”_C#_Asp.net_Htmlgenericcontrol - Fatal编程技术网

C# HtmlGenericControl给我一个错误“对象引用未设置为对象的实例”

C# HtmlGenericControl给我一个错误“对象引用未设置为对象的实例”,c#,asp.net,htmlgenericcontrol,C#,Asp.net,Htmlgenericcontrol,我试图改变内容页的css,它从母版页继承了css。 我尝试了下面的方法,但由于某些原因,我得到的对象引用没有设置为对象错误的实例 下面是我的cs代码: protected void Page_Load(object sender, EventArgs e) { HtmlGenericControl mycontrol = (HtmlGenericControl)this.Page.Master.FindControl("ul1").FindControl("li1") as Html

我试图改变内容页的css,它从母版页继承了css。 我尝试了下面的方法,但由于某些原因,我得到的对象引用没有设置为对象错误的实例

下面是我的cs代码:

 protected void Page_Load(object sender, EventArgs e)
 {
    HtmlGenericControl mycontrol = (HtmlGenericControl)this.Page.Master.FindControl("ul1").FindControl("li1") as HtmlGenericControl;

      mycontrol.Attributes.Add("class", "newCSS");    
 }
在此处找到母版页内容:

    <div id="menu">
        <ul id="ul1" runat="server">
            <li id="li1" runat="server">
                <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl ="home.aspx">Home</asp:HyperLink></li>
            <li id="li2" runat="server">
                <asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl ="AboutUs.aspx">About Us</asp:HyperLink></li>
            <li id="li3" runat="server">
                <asp:HyperLink ID="HyperLink3" runat="server" NavigateUrl="~/courses.aspx" >Courses</asp:HyperLink></li>
            <li id="li4" runat="server">
                <asp:HyperLink ID="HyperLink4" runat="server" NavigateUrl="~/News.aspx" >News</asp:HyperLink></li>
            <li id="li5" runat="server">
                <asp:HyperLink ID="HyperLink5" runat="server" NavigateUrl="ContactInfo.aspx" >Contact Us</asp:HyperLink></li>
        </ul>
    </div>
我尝试将.FindControl ID作为超链接ID,而不是如上所示的ul,li ID,但这也不起作用

编辑: 在cs页面中尝试了以下操作:

protected void Page_Load(object sender, EventArgs e)
{
        HtmlGenericControl mycontrol = (HtmlGenericControl)Master.FindControl("ul1").FindControl("li1"); 
        mycontrol.Attributes.Add("class", "newCSS");    
}

没有编译器错误,但代码不起作用。

对于这种情况,我使用递归函数。当您需要从内容页查找/编辑母版页上的内容时,这总是很棘手的。这个功能对我帮助很大。在本例中,我使用它来查找母版页上名为Menu2的菜单的返回按钮,方法是将按钮的ID传递给它

*方法

*用法

使用此方法,我现在可以从内容页访问母版页的菜单


我希望这有帮助

您是否尝试过执行以下WebControl mycontrol=WebControl Page.FindControl 1@是的,我试过了。我也遇到了同样的错误。您是否尝试过将runat=服务器向上移动suggested@DJ是的,我做到了。让我在问题中编辑一下。在发布问题之前,我在寻找解决方案时犯了一个简单的错误。HtmlGenericControl myControl=HtmlGenericControlMaster.FindControlul1;应该做的特里克我明白的概念。非常感谢。我需要更多地了解这一点,因为我对c非常陌生。我将学习,解决这个问题,并在这里发布完整的答案。
protected void Page_Load(object sender, EventArgs e)
{
        HtmlGenericControl mycontrol = (HtmlGenericControl)Master.FindControl("ul1").FindControl("li1"); 
        mycontrol.Attributes.Add("class", "newCSS");    
}
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;
    }
Menu menu2 = (Menu)FindControlRecursive(Master.Page, "ReturnButton");