[英]Unable to remove menu item from Asp Menu
ASPX:
<asp:Menu id ="menuBar" runat="server" Orientation="Horizontal"
IncludeStyleBlock="false">
<item>
<asp:MenuItem Text="Home"></asp:MenuItem>
<asp:MenuItem Text="Folio">
<asp:MenuItem Text="Nature" NavigateUrl="#" value="1"></asp:MenuItem>
<asp:MenuItem Text="People" NavigateUrl="#" value="2"></asp:MenuItem>
</asp:MenuItem>
<asp:MenuItem Text="Contact">
<asp:MenuItem Text="admin" NavigateUrl="#" value="3"></asp:MenuItem>
</asp:MenuItem>
</items>
</asp:Menu>
C#:
protected void page_load(object sender, eventargs e)
{
List<tblDetal> lstDetail = objDal.GetData();
foreach(MenuItem parent in menuBar.Items)
{
if(parent.ChildItems.Count > 0)
{
foreach(MenuItem child in parent.ChildItems)
{
bool showItem = false;
foreach(var item in lstDetail)
{
if(convert.toint32(child.value)==item.FormId)
{
showItem = true;
break;
}
}
if(showItem==false)
parent.ChildItems.Remove(child);
}
}
}
}
那是我根據某些標准從菜單中刪除項目的簡單代碼。 編譯器讀取“ remove”行后,它返回到foreach循環,然后引發異常-“集合已修改。枚舉操作可能無法執行”。
我了解這一點,但不知道如何解決。 如果只是要刪除的一項,那會更容易。
您正在嘗試從列表中刪除項目。 您無法在使用集合時對其進行修改。 您需要做的是將其放在一個臨時列表中,並在迭代后刪除違反showitem布爾值的子級。
protected void Page_Load(object sender, EventArgs e)
{
List<tblDetal> lstDetail = objDal.GetData();
//New Code
List<MenuItem> listOfChildrenToDelete;
foreach(MenuItem parent in menuBar.Items)
{
if(parent.ChildItems.Count > 0)
{
//Instantiate new temporary List
listOfChildrenToDelete = new List<MenuItem>();
foreach(MenuItem child in parent.ChildItems)
{
bool showItem = false;
foreach(var item in lstDetail)
{
if(Convert.ToInt32(child.value) == item.FormId)
{
showItem = true;
break;
}
}
if(showItem==false)
{
//Add to new temporary list
listOfChildrenToDelete.Add(child);
}
}
//Added Code
foreach(MenuItem childToDelete in listOfChildrenToDelete)
{
//Delete after you are no longer looking at that collection.
parent.ChildItems.Remove(childToDelete);
}
}
}
}
這有意義嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.