2017-06-30 111 views
1

假設我迭代所有受限制的控制器及其關聯的動作,並在我的課程中添加這些控制器和動作。如何從列表中顯示控制器和操作?

public class ControllerActionList 
{ 
    public string ControllerName { get; set; } 
    public string ActionName { get; set; }   
} 

這樣我填充用手模擬目的:

public List<ControllerActionList> ControllerActionList() 
{ 
    List<ControllerActionList> oControllerActionList = new List<ControllerActionList> 
    { 
     new ControllerActionList { ControllerName = "Home", ActionName = "Index" }, 
     new ControllerActionList { ControllerName = "Home", ActionName = "DashBoard" }, 
     new ControllerActionList { ControllerName = "Home", ActionName = "Chart" }, 

     new ControllerActionList { ControllerName = "HR", ActionName = "Leave" }, 
     new ControllerActionList { ControllerName = "HR", ActionName = "Loan" }, 
     new ControllerActionList { ControllerName = "HR", ActionName = "NoticeBoard" }, 

     new ControllerActionList { ControllerName = "PayRoll", ActionName = "View" }, 
     new ControllerActionList { ControllerName = "PayRoll", ActionName = "Edit" }, 
     new ControllerActionList { ControllerName = "PayRoll", ActionName = "Process" } 
    }; 

    return oControllerActionList; 
} 

現在我應該用什麼樣的邏輯在我看來,以顯示這些控制器和其相關的動作名稱(見下面的圖片)?

查看,控制器名稱爲家庭,人力資源和薪資和操作如下所示。

你能告訴我最好的方式來顯示控制器名稱首先作爲標題和他們的動作名稱。在我的情況下,控制器名稱在課堂上重複。

我可以做的一件事是我可以編寫一個for循環,當控制器名稱更改時,我將創建一個新的div,其中將顯示新的或下一個控制器名稱。

也請通過告訴我如何實現這個設計。

我的問題,現在:

1)如何顯示在頂部的控制器名稱,並在下面div及其相關行動,並重復每個控制器的行動?

2)如何使用bootstrap實現所示設計?

enter image description here

+4

使用的GroupBy上ControllerName,然後你可以基於迭代和扁平的動作名稱 – Nkosi

+0

我是不知道如何在控制器名稱上使用group,因爲我需要獲取每個控制器的所有操作名稱。你可以提供一個示例只是爲了提示使用控制器名稱上的組。 –

+0

Linq GroupBy有據可查 –

回答

2

我majorly重寫這個答案,如果你想看到老壞看看改變歷史。

正如你在評論中看到的,大多數人表示你必須使用.GroupBy來獲得單個ControllerActionItems。我現在已經把它改寫成兩個班級,一個班級名爲ControllerBlock和一個ControllerAction

ControllerBlock(現在有ControllerAction一個1-N-關係):

public class ControllerBlock 
{ 
    public string ControllerName { get; set; } 
    public List<ControllerAction> ControllerActions { get; set; } 
} 

ControllerAction:

public class ControllerAction 
{ 
    public string ActionName { get; set; } 
    public bool ActionActive { get; set; } 
} 

在假設這些矩形確實CheckBox控件,可以使用所謂的編輯器模板來減少代碼,並最大限度地減少您的問題Controller

根據你要使用的代碼的位置,你可以把它放到Views - >Shared - >EditorTemplates

現在創建一個那是你的模型後究竟命名視圖,在這裏:通過@model ControllerBlockControllerBlock

EditorTemplate structure in solution

打開ControllerBlock.cshtml文件和參考模型,然後建立自己的

@model ControllerBlock 

<div class="col-lg-12 panel"> 
    @Model.ControllerName 
    <hr class="row"> 
    @foreach (ControllerAction actionItem in Model.ControllerActions) 
    { 
     <div class="col-lg-4">@Html.CheckBoxFor(m => actionItem.ActionActive)<a href="~/@Model.ControllerName/@actionItem.ActionName">@actionItem.ActionName</a></div> 
    } 
</div> 

現在,您可以輕鬆地建立您的網站模型。

在相應的站點視圖中,使用@Html.EditorFor(x => x.ControllerActionBlocks)來引用該編輯器模板。 ASP.NET將自動處理剩下的事情。

SomePage.cshtml(查看):

@model SomeModel 

@{ 
    ViewData["Title"] = "SomePage"; 
} 
<h2>@ViewData["Title"].</h2> 
<h3>@ViewData["Message"]</h3> 

@Html.LabelFor(x => x.SomeProperty) 

@Html.EditorFor(x => x.ControllerActionBlocks) 

例子:

SomeModel:

public class SomeModel 
{ 
    public string SomeProperty { get; set; } 
    public IEnumerable<ControllerBlock> ControllerActionBlocks { get; set; } 
} 

在你Controller,填補了模型數據:

public IActionResult SomePage() 
{ 
    var model = new SomeModel() 
    { 
     SomeProperty = "Your application model property.", 
     ControllerActionBlocks = GetControllerBlocks() 
    }; 

    return View(model); 
} 

待辦事項: 定義md,sm,xs設備的編輯器模板。

有關在引導列的更多信息,請訪問:Bootstrap Grid System

這是GetControllerBlocks()定義:

public List<ControllerBlock> GetControllerBlocks() 
{ 
    //Set ActionActive herem, if necessary 
    List<ControllerAction> homeActions = new List<ControllerAction>() { 
     new ControllerAction { ActionName = "Index" }, 
     new ControllerAction { ActionName = "DashBoard" }, 
     new ControllerAction { ActionName = "Chart" } 
    }; 
    List<ControllerAction> hrActions = new List<ControllerAction>() { 
     new ControllerAction { ActionName = "Leave" }, 
     new ControllerAction { ActionName = "Loan" }, 
     new ControllerAction { ActionName = "NoticeBoard" } 
     }; 

    List<ControllerAction> payRollActions = new List<ControllerAction>() { 
     new ControllerAction { ActionName = "View" }, 
     new ControllerAction { ActionName = "Edit" }, 
     new ControllerAction { ActionName = "Process" } 
     }; 

    List<ControllerBlock> actionBlocks = new List<ControllerBlock>() 
    { 
     new ControllerBlock(){ControllerName = "Home", ControllerActions = homeActions}, 
     new ControllerBlock(){ControllerName = "HR", ControllerActions = hrActions}, 
     new ControllerBlock(){ControllerName = "PayRoll", ControllerActions = payRollActions} 
    }; 

    return actionBlocks; 
} 
+0

你的新代碼是好的,但請求,如果可能的話,請添加你的舊代碼也發佈之前的內容。非常感謝。 –

+0

@MonojitSarkar您可以在我的用戶名旁邊點擊「編輯n小時」前的內容。向下滾動到底部,您會在那裏找到它。 – jAC

+0

非常感謝......... –

相關問題