Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.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# 控件。添加并从列表中删除以前的项_C#_Asp.net Mvc_Html Generation_Htmlgenericcontrol - Fatal编程技术网

C# 控件。添加并从列表中删除以前的项

C# 控件。添加并从列表中删除以前的项,c#,asp.net-mvc,html-generation,htmlgenericcontrol,C#,Asp.net Mvc,Html Generation,Htmlgenericcontrol,我试图在控制器中创建一个动态菜单,然后将其渲染到视图中。我发现的是,Controls.Add正在从我的列表中删除项目,而我最终只显示最后一个项目。如何确保它显示列表中的所有项目,以及如何在创建动态菜单后完成子元素的显示 public string CreateDynamicMenu() { HtmlGenericControl navbar = new HtmlGenericControl("nav"); navbar.Att

我试图在控制器中创建一个动态菜单,然后将其渲染到视图中。我发现的是,Controls.Add正在从我的列表中删除项目,而我最终只显示最后一个项目。如何确保它显示列表中的所有项目,以及如何在创建动态菜单后完成子元素的显示

public string CreateDynamicMenu()   
        {
            HtmlGenericControl navbar = new HtmlGenericControl("nav");
            navbar.Attributes.Add("class", "navbar navbar-default");
            HtmlGenericControl containerDiv = new HtmlGenericControl("div");
            containerDiv.Attributes.Add("class", "container-fluid");
            HtmlGenericControl collapseDiv = new HtmlGenericControl("div");
            collapseDiv.Attributes.Add("class", "collapse navbar-collapse");
            HtmlGenericControl navUl = new HtmlGenericControl("ul");
            navUl.Attributes.Add("class", "nav navbar-nav");
            HtmlGenericControl dropdownLi = new HtmlGenericControl("li");
            dropdownLi.Attributes.Add("class", "dropdown");
            HtmlGenericControl mainMenuA = new HtmlGenericControl("a");


            var myMenu = menuListForUserG.GetMenus(Global.CurrentProfile.UserID).OrderBy(x => x.MenuOrder).ThenBy(y => y.MenuName);
            var navbarmenu = myMenu.Where(x => x.ParentID == null);

            foreach (var item in navbarmenu)
            {    
                mainMenuA.InnerText = item.MenuName;
                dropdownLi.Controls.Add(mainMenuA);
                navUl.Controls.Add(dropdownLi);                    
            }  

            collapseDiv.Controls.Add(navUl);
            containerDiv.Controls.Add(collapseDiv);
            navbar.Controls.Add(containerDiv);    

            StringBuilder htmlStringBuilder = new StringBuilder();
            HtmlTextWriter htmlStringWriter = new HtmlTextWriter(new StringWriter(htmlStringBuilder));
            navbar.RenderControl(htmlStringWriter);
            String output = htmlStringBuilder.ToString();
            return output; }

问题是您在循环中反复添加相同的
dropdownLi
mainMenuA
实例。我认为Control.Add不会将重复项添加到列表中,因此该控件只会有效地添加一次。循环的最后一次运行时,将文本更改为最后一项的文本

为了解决此问题,您需要按如下方式创建新实例:

foreach (var item in navbarmenu)
{
    // Move the following lines from outside the loop inside
    HtmlGenericControl dropdownLi = new HtmlGenericControl("li");
    dropdownLi.Attributes.Add("class", "dropdown");
    HtmlGenericControl mainMenuA = new HtmlGenericControl("a");    
    mainMenuA.InnerText = item.MenuName;
    dropdownLi.Controls.Add(mainMenuA);
    navUl.Controls.Add(dropdownLi);                    
}