2014-01-11 70 views
0

嗨我有一个网站有一个主菜单,根据用户的角色填充 这需要在母版页中有很多菜单处理代码,事情工作正常 我感兴趣要知道,这种做法有任何性能下降 还是有把菜单这样的一个更好的方法(我不使用默认的asp.net DB和账户等),这里是我的代码:在主页面上创建菜单

DAO dao = new DAO(); 
protected void Page_Load(object sender, EventArgs e) 
{ DispMenues(); } 

protected void btnLogin_Click(object sender, EventArgs e) 
{ /* Login Mechanism */ } 

private void DispMenues() 
{ // Menu is main menue on the page 
    Menu.Items.Clear(); 
    MenuItem mnuHome = new MenuItem("&nbsp&nbspHome&nbsp&nbsp", "Home"); 
    mnuHome.NavigateUrl = "~/index.aspx"; 
    Menu.Items.Add(mnuHome); 

    if (Session["urole"] != null) 
     switch (Session["urole"].ToString()) 
     { 
      case "admin": 
       AdmMenu(); 
       break; 
      case "supervisor": 
       SupMenu(); 
       break; 
      case "deo": 
       DEOMenu(); 
       break; 
      default: 
       Response.Redirect("index.aspx"); 
       break; 
     } 

} 

#region AllMenues 

private void AdmMenu() 
{ 
    DataFeeding(); EditData(); 
    Reports(); 
} 
// For other users menu funcions are similar as above 

// Actual Menu Functions 
private void DataFeeding() 
{ 
    // Main menu data feeding 
    MenuItem mnuMainDataFeed = new MenuItem("&nbsp&nbspData Feeding&nbsp&nbsp", "DataFeeding"); 

    // Add first level menus under Data Feeding main menu 
    MenuItem mnuMlkProd = new MenuItem("Milk Production", "MilkProduction"); 
    mnuMlkProd.NavigateUrl = "~/mprodentry.aspx"; 

    MenuItem mnuPedigree = new MenuItem("Pedigree", "Pedigree"); 
    mnuPedigree.NavigateUrl = "~/pedigentry.aspx"; 

    MenuItem mnuPedigreeExt = new MenuItem("External Animal", "External Animal"); 
    mnuPedigreeExt.NavigateUrl = "~/pedigextrnlentry.aspx"; 

    MenuItem mnuDisposalData = new MenuItem("Disposal", "Disposal"); 
    mnuDisposalData.NavigateUrl = "~/dispentry.aspx"; 

    mnuMainDataFeed.ChildItems.Add(mnuMlkProd); 
    mnuMainDataFeed.ChildItems.Add(mnuPedigree); 
    mnuMainDataFeed.ChildItems.Add(mnuPedigreeExt); 

    // Add 2nd/3rd level menus under Data Feeding > Feed 
    MenuItem mnuFeedingData = new MenuItem("Feeding", "Feeding"); 
    MenuItem mnuYoungAnimFeed = new MenuItem("Young Animal", "YoungAnimal"); 
    mnuYoungAnimFeed.NavigateUrl = "~/calfdngentry.aspx"; 
    mnuFeedingData.ChildItems.Add(mnuYoungAnimFeed); 

    MenuItem mnuLactDryAnim = new MenuItem("Lactating/Dry Animal", "LactDryAnim"); 
    mnuLactDryAnim.NavigateUrl = "~/lctdryentry.aspx"; 
    mnuFeedingData.ChildItems.Add(mnuLactDryAnim); 

    MenuItem mnuBullsFeed = new MenuItem("Bulls", "Bulls"); 
    mnuBullsFeed.NavigateUrl = "~/bullfdentry.aspx"; 
    mnuFeedingData.ChildItems.Add(mnuBullsFeed); 

    mnuMainDataFeed.ChildItems.Add(mnuFeedingData); 

    // Add 2nd/3rd level menus under Data Feeding > Breeding and Reproduction 
    MenuItem mnuBreedReprod = new MenuItem("Breeding & Reproduction", "BreedReprod"); 

    MenuItem mnuCalvingRecord = new MenuItem("Calving Record", "CalvingRecord"); 
    mnuCalvingRecord.NavigateUrl = "~/calvngentry.aspx"; 
    mnuBreedReprod.ChildItems.Add(mnuCalvingRecord); 

    MenuItem mnuServiceRecord = new MenuItem("Service Record", "ServiceRecord"); 
    mnuServiceRecord.NavigateUrl = "~/seviceentry.aspx"; 
    mnuBreedReprod.ChildItems.Add(mnuServiceRecord); 

    MenuItem mnuServicePos = new MenuItem("Service Position", "Service Position"); 
    mnuServicePos.NavigateUrl = "~/servposentry.aspx"; 
    mnuBreedReprod.ChildItems.Add(mnuServicePos); 

    mnuMainDataFeed.ChildItems.Add(mnuBreedReprod); 


    // Add 2nd/3rd level menus under Data Feeding > Diseases 
    MenuItem mnuDiseases = new MenuItem("Diseases", "Diseases"); 
    MenuItem mnuDiseaseData = new MenuItem("Disease Data", "Disease Data"); 
    mnuDiseaseData.NavigateUrl = "~/disentry.aspx"; 
    mnuDiseases.ChildItems.Add(mnuDiseaseData); 

    MenuItem mnuTreatData = new MenuItem("Treatment Data", "Treatment Data"); 
    mnuTreatData.NavigateUrl = "~/treatmntentry.aspx"; 
    mnuDiseases.ChildItems.Add(mnuTreatData); 

    mnuMainDataFeed.ChildItems.Add(mnuDiseases); 

    // Add 2nd/3rd level menus under Data Feeding > Inventory 
    MenuItem mnuInventory = new MenuItem("Inventory", "Inventory"); 

    MenuItem mnuStock = new MenuItem("Stock", "Stock"); 
    mnuStock.NavigateUrl = "~/inventstckentry.aspx"; 
    mnuInventory.ChildItems.Add(mnuStock); 

    MenuItem mnuDeadStock = new MenuItem("Dead Stock", "DeadStock"); 
    mnuDeadStock.NavigateUrl = "~/deadstckentry.aspx"; 
    mnuInventory.ChildItems.Add(mnuDeadStock); 

    mnuMainDataFeed.ChildItems.Add(mnuInventory); 

    // Add 2nd/3rd level menus under Data Feeding > Land 
    MenuItem mnuLand = new MenuItem("Land", "Land"); 

    MenuItem mnuLandRecord = new MenuItem("Land Record", "LandRecord"); 
    mnuLandRecord.NavigateUrl = "~/landrcrdentry.aspx"; 
    mnuLand.ChildItems.Add(mnuLandRecord); 

    MenuItem mnuCultivatatedLand = new MenuItem("Cultivated", "Cultivated"); 
    mnuCultivatatedLand.NavigateUrl = "~/landcultvtdentry.aspx"; 
    mnuLand.ChildItems.Add(mnuCultivatatedLand); 

    MenuItem mnuCultivationYears = new MenuItem("Cultivation Years", "CultivationYears"); 
    mnuCultivationYears.NavigateUrl = "~/cultyrsentry.aspx"; 
    mnuLand.ChildItems.Add(mnuCultivationYears); 

    mnuMainDataFeed.ChildItems.Add(mnuLand); 

    MenuItem mnuMilkCons = new MenuItem("Milk Consumption", "MilkConsumption"); 
    mnuMilkCons.NavigateUrl = "~/milkconsmpentry.aspx"; 
    mnuMainDataFeed.ChildItems.Add(mnuMilkCons); 


    // Add last main menu under Feed data menu 
    mnuMainDataFeed.ChildItems.Add(mnuDisposalData); 

    // Add feeding data main menu to menu bar 
    Menu.Items.Add(mnuMainDataFeed); 
} 
private void EditData() 
{ 
    // Main menu Edit Data 
    MenuItem mnuMainEditData = new MenuItem("&nbsp&nbspEdit Data&nbsp&nbsp", "EditData"); 

    // Add first level menus under Data Feeding main menu 
    MenuItem mnuEdtMlkProd = new MenuItem("Milk Production", "MilkProduction"); 
    mnuEdtMlkProd.NavigateUrl = "~/editmprod.aspx"; 

    MenuItem mnuEdtPedigree = new MenuItem("Pedigree", "Pedigree"); 
    mnuEdtPedigree.NavigateUrl = "~/editpedigdata.aspx"; 

    mnuMainEditData.ChildItems.Add(mnuEdtMlkProd); 
    mnuMainEditData.ChildItems.Add(mnuEdtPedigree); 



    // Add 2nd/3rd level menus under Data Feeding > Feed 
    MenuItem mnuEdtFeedingData = new MenuItem("Feeding", "Feeding"); 
    MenuItem mnuEdtYoungAnimFeed = new MenuItem("Young Animal", "YoungAnimal"); 
    mnuEdtYoungAnimFeed.NavigateUrl = "~/editclfedng.aspx"; 
    mnuEdtFeedingData.ChildItems.Add(mnuEdtYoungAnimFeed); 

    MenuItem mnuEdtLactDryAnim = new MenuItem("Lactating/Dry Animal", "LactDryAnim"); 
    mnuEdtLactDryAnim.NavigateUrl = "~/editdrylact.aspx"; 
    mnuEdtFeedingData.ChildItems.Add(mnuEdtLactDryAnim); 

    MenuItem mnuEdtBullsFeed = new MenuItem("Bulls", "Bulls"); 
    mnuEdtBullsFeed.NavigateUrl = "~/editbulsfd.aspx"; 
    mnuEdtFeedingData.ChildItems.Add(mnuEdtBullsFeed); 

    mnuMainEditData.ChildItems.Add(mnuEdtFeedingData); 


    // Add 2nd/3rd level menus under Data Feeding > Breeding and Reproduction 
    MenuItem mnuEdtBreedReprod = new MenuItem("Breeding & Reproduction", "BreedReprod"); 

    MenuItem mnuEdtCalvingRecord = new MenuItem("Calving Record", "CalvingRecord"); 
    mnuEdtCalvingRecord.NavigateUrl = "~/editcvngrcrd.aspx"; 
    mnuEdtBreedReprod.ChildItems.Add(mnuEdtCalvingRecord); 

    MenuItem mnuEdtServiceRecord = new MenuItem("Service Record", "ServiceRecord"); 
    mnuEdtServiceRecord.NavigateUrl = "~/editsrvcrcrd.aspx"; 
    mnuEdtBreedReprod.ChildItems.Add(mnuEdtServiceRecord); 

    MenuItem mnuEdtServicePos = new MenuItem("Service Position", "Service Position"); 
    mnuEdtServicePos.NavigateUrl = "~/editservpos.aspx"; 
    mnuEdtBreedReprod.ChildItems.Add(mnuEdtServicePos); 

    mnuMainEditData.ChildItems.Add(mnuEdtBreedReprod); 


    // Add 2nd/3rd level menus under Edit Data > Feeding > Diseases 
    MenuItem mnuEdtDiseases = new MenuItem("Diseases", "Diseases"); 

    MenuItem mnuEdtDiseaseData = new MenuItem("Disease Data", "Disease Data"); 
    mnuEdtDiseaseData.NavigateUrl = "~/editdis.aspx"; 
    mnuEdtDiseases.ChildItems.Add(mnuEdtDiseaseData); 

    MenuItem mnuEdtTreatData = new MenuItem("Treatment Data", "Treatment Data"); 
    mnuEdtTreatData.NavigateUrl = "~/edittrtmnt.aspx"; 
    mnuEdtDiseases.ChildItems.Add(mnuEdtTreatData); 

    mnuMainEditData.ChildItems.Add(mnuEdtDiseases); 

    // Add 2nd/3rd level menus under Edit Data > Inventory 
    MenuItem mnuEdtStock = new MenuItem("Inventory", "Inventory"); 

    MenuItem mnuEdtOfficeStock = new MenuItem("Stock", "Stock"); 
    mnuEdtOfficeStock.NavigateUrl = "~/editinvntstck.aspx"; 
    mnuEdtStock.ChildItems.Add(mnuEdtOfficeStock); 

    MenuItem mnuDeadStock = new MenuItem("Dead Stock", "DeadStock"); 
    mnuDeadStock.NavigateUrl = "~/editdeadstck.aspx"; 
    mnuEdtStock.ChildItems.Add(mnuDeadStock); 

    mnuMainEditData.ChildItems.Add(mnuEdtStock); 

    // Add 2nd/3rd level menus under Data Feeding > Land 
    MenuItem mnuEdtLand = new MenuItem("Land", "Land"); 

    MenuItem mnuEdtLandRecord = new MenuItem("Land Record", "LandRecord"); 
    mnuEdtLandRecord.NavigateUrl = "~/editlandrcrd.aspx"; 
    mnuEdtLand.ChildItems.Add(mnuEdtLandRecord); 

    MenuItem mnuEdtCultand = new MenuItem("Cultivated", "Cultivated"); 
    mnuEdtCultand.NavigateUrl = "~/editlandcultvtd.aspx"; 
    mnuEdtLand.ChildItems.Add(mnuEdtCultand); 

    mnuMainEditData.ChildItems.Add(mnuEdtLand); 

    // Add menu under Edit Data > Disposal 
    MenuItem mnuEdtDispData = new MenuItem("Disposal", "Disposal"); 
    mnuEdtDispData.NavigateUrl = "~/editdisp.aspx"; 
    mnuMainEditData.ChildItems.Add(mnuEdtDispData); 

    // Add edit data main menu to menu bar 
    Menu.Items.Add(mnuMainEditData); 
} 
private void Reports() 
{ 
    MenuItem mnuReportsMain = new MenuItem("&nbsp&nbspView Report&nbsp&nbsp", "ViewReport"); 
    mnuReportsMain.NavigateUrl = "~/reportoptions.aspx"; 
    // Add View Reports main menu 
    Menu.Items.Add(mnuReportsMain); 
} 

#endregion 

回答

0

这可以。
如果我是你,我会在你的项目名称中使用css而不是“& nbsp”。
此外,你可以使用MenuItem构造函数,它需要... 5个参数(我认为),包括NavigateUrl。
或者您可以简单地使用默认构造函数并逐个初始化属性。

编辑:哦,还有一点......这是更好地在菜单控制DataBound事件创建项目,你应该考虑使用网站地图

+0

感谢其实我不使用数据绑定的事件,不需要任何站点地图,请告诉我,如果使用站点地图会使事情有效? – user3184772

+0

肯定会使SiteMap更清晰,因为您不必以编程方式创建所有常见项目(除了那些与用户级别有关的项目外) –