Tôi có một khung nhìn một phần trong một dự án MVC 4, được gõ mạnh mẽ. Phải mất một bộ sưu tập IEnumerable của một bảng cơ sở dữ liệu. Trong bảng đó có các ID, Tên và ParentID để lưu trữ kết nối phân cấp giữa các bản ghi. Quan điểm cho rằng gọi là xem một phần cũng là mạnh mẽ đánh máy, phải mất toàn bộ cơ sở dữ liệu như mô hình, và vượt qua bảng Categories đến xem một phần, như một bộ sưu tập đếm được:ASP.NET MVC 4 tạo ra một khung nhìn tre với một phần xem đệ quy
@Html.Partial("_TreeCategories", @Model.Categories.ToList())
Và trong giao diện một phần, tôi muốn lấy các nút gốc đầu tiên, vì vậy tôi có thể mở rộng toàn bộ cây theo cách đệ quy. Trong bảng cơ sở dữ liệu, tất cả các bản ghi được coi là các nút gốc với một ParentID == null.
Vì vậy, nhìn chung, cách của tôi để làm điều này sẽ như thế nào:
@model IEnumerable<TreeCollections.OpenAccess.Category>
@if (Model.ToList().Count >= 0)
{
@if (Model.ToList()[0].Parent_id == null)
{
<text><ul id="navigation"></text>
}
@foreach (var node in @Model)
{
<li><a href="[email protected]">@node.Name</a>
@foreach (var subNode in @Model.Where(s => s.Parent_id == node.Id))
{
@Html.Partial("_TreeCategories", subNode)
}
</li>
}
@if (Model.ToList()[0].Parent_id == null)
{
</ul>
}
}
Vì vậy, tôi kiểm tra xem ParentID phần tử đầu tiên của mô hình là null, và nếu nó là, sau đó nó nên tạo một < ul> tag với id "điều hướng", do đó, plugin jquery có thể nhận ra rằng nó có nghĩa là để được một kiểm soát treeview. Sau đó, nó tạo ra một thẻ danh sách với một cuộc gọi đệ quy bên trong. Chế độ xem từng phần được gọi là đệ quy lấy các nút con của nút làm mô hình. Và cuối cùng, nếu chúng tôi đến cuối phần hiển thị của chế độ xem một phần và chúng tôi đang ở cấp "root", bạn nên viết một thẻ đóng < ul>
Tuy nhiên, có một số vấn đề. Đầu tiên, cuối cùng, việc đóng thẻ danh sách không theo thứ tự là sai, VS không thể tìm thấy thẻ bắt đầu phù hợp cho điều đó. Thứ hai, tôi không biết tại sao, nhưng ở trên cùng, tôi có thể đặt thẻ starter < ul> vào giữa các thẻ và tôi không thể thực hiện điều đó ở thẻ đóng bên dưới. Nhưng tôi cũng không chắc chắn về những thẻ này, tôi cảm thấy chúng cũng sai.
Xin vui lòng, giúp tôi, tôi bị mắc kẹt với điều này trong nhiều ngày nay.
Cảm ơn bạn, nó rất rõ ràng, tuy nhiên, tôi đã nhầm lẫn về nó trong nhiều ngày ... Tôi vừa cài đặt lại toàn bộ hệ thống trên máy tính, phải mất một thời gian cho đến khi tôi tải xuống và cài đặt lại Visual Studio ra, nhưng ít nhất tôi nhìn thấy mô hình bây giờ! Cảm ơn bạn rất nhiều! – user2082422
đó là cách hầu hết thời gian, vui lòng giúp đỡ –
Nhân tiện, bạn nên giới thiệu loại ánh xạ bố mẹ-con nào? Tôi đã chọn phương thức "ID - ParentID" vì đây là một cách để thực hiện cấu trúc dữ liệu phân cấp trong một datamodel quan hệ, chẳng hạn như một cơ sở dữ liệu. Trong ID bảng danh mục là khóa chính, ParentID là khóa ngoài tham chiếu đến Categories.ID. – user2082422