PDA

View Full Version : کلاس MenuBuilder



mahdi_2490
پنج شنبه 16 آبان 1392, 20:52 عصر
سلام
من یه کلاس دارم برا منو دینامیک ولی نمی دونم پارامتر ورودی چی بهش بدم (منظور ICollection<MenuItemList> menuItems چیه ؟) میشه از پایگاه داده بهش داده ؟
لطفا راهنمایی کنید

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

public class MenuItemList
{
public Guid Id;
public Guid OwnerId;
public String Text;
public String Page;
}

public class MenuBuilder
{

public String CreateMenu(ICollection<MenuItemList> menuItems)
{
try
{
StringBuilder builder = new StringBuilder();
builder.Append("<div id='cssmenu'>");
builder.AppendLine();
builder.Append("<ul>");
builder.AppendLine();

#region Menu Level 1

foreach (var parrentNode in menuItems.Where(parrentNode => parrentNode.OwnerId == Guid.Empty))
{
builder.Append(menuItems.Any(a => a.OwnerId == parrentNode.Id)
? "<li class='has-sub'><a href='@href' title='@title'><span>@text</span></a><ul>"
: "<li><a href='@href' title='@title'><span>@text</span></a></li>");

if (String.IsNullOrEmpty(parrentNode.Page))
{
builder.Replace("@href","Default.aspx?menuId=" + parrentNode.Id + "&menuText=" + parrentNode.Text.Trim());

}
else
{
builder.Replace("@href",
parrentNode.Page);
}


builder.Replace("@text", parrentNode.Text.Trim());
builder.Replace("@title", parrentNode.Text.Trim());
builder.AppendLine();


#region Menu Level 2

foreach (var childNode1 in menuItems.Where(a => a.OwnerId == parrentNode.Id))
{
builder.Append(menuItems.Any(b => b.OwnerId == childNode1.Id)
? "<li class='has-sub'><a href='@href' title='@title'><span>@text</span></a><ul>"
: "<li><a href='@href' title='@title'><span>@text</span></a></li>");
builder.Replace("@href",
"Default.aspx?menuId=" + childNode1.Id + "&menuText=" + childNode1.Text.Trim());
builder.Replace("@text", childNode1.Text.Trim());
builder.Replace("@title", childNode1.Text.Trim());
builder.AppendLine();

#region Menu Level 3

foreach (var childNode2 in menuItems.Where(b => b.OwnerId == childNode1.Id))
{
builder.Append(menuItems.Any(c => c.OwnerId == childNode2.Id)
? "<li class='has-sub'><a href='@href' title='@title'><span>@text</span></a><ul>"
: "<li><a href='@href' title='@title'><span>@text</span></a></li>");
builder.Replace("@href",
"Default.aspx?menuId=" + childNode2.Id + "&menuText=" + childNode2.Text.Trim());
builder.Replace("@text", childNode2.Text.Trim());
builder.Replace("@title", childNode2.Text.Trim());
builder.AppendLine();

#region Menu Level 4

foreach (var childNode3 in menuItems.Where(c => c.OwnerId == childNode2.Id))
{
builder.Append("<li><a href='@href' title='@title'><span>@text</span></a></li>");
builder.Replace("@href",
"Default.aspx?menuId=" + childNode3.Id + "&menuText=" +
childNode3.Text.Trim());
builder.Replace("@text", childNode3.Text.Trim());
builder.Replace("@title", childNode3.Text.Trim());
//? The third level menu (if necessery)
builder.AppendLine();
builder.AppendLine();
}

#endregion

builder.Append(menuItems.Any(c => c.OwnerId == childNode2.Id) ? "</ul></li>" : "");
builder.AppendLine();
}

#endregion

builder.Append(menuItems.Any(b => b.OwnerId == childNode1.Id) ? "</ul></li>" : "");
builder.AppendLine();
}

#endregion

builder.Append(menuItems.Any(a => a.OwnerId == parrentNode.Id) ? "</ul></li>" : "");
builder.AppendLine();
}

#endregion

builder.Append("</ul>");
builder.AppendLine();
builder.Append("</div>");
builder.AppendLine();

return builder.ToString();
}
catch (Exception e)
{
throw new Exception(e.Message);
}

}

}