2017-12-18 21 views
0

트리 구조화 된 제품 카테고리보기를 만들고 싶습니다. 나는 2011 년부터 this article by Ole Michelsen을 찾았습니다. 나는 유망 해 보입니다. 이 기사에서는 Razor를 사용하여 재귀 적으로 트리 구조를 렌더링하는 것과 거의 비슷한 방법을 설명합니다.Asp.Net Core 2.0에서 재귀

내 데이터베이스 테이블이 문서에서 설명 된 것과 거의 동일 :

[ProductCategory] 
Id 
ParentId 
Title 

내가보기 모델이 어떻게 보일지 모르겠어요. ProductCategory가 IEnumerable이거나 ProductCategory의 인스턴스 여야하고 IEnumerable의 ProductCategories가 있어야합니까?

이런 식으로 뭔가 ...

public class ViewModelProductCategory 
{ 
    public int Id { get; set; } 
    public int? ParentId { get; set; } 
    public string Title { get; set; } 
    public int SortOrder { get; set; } 
    public int NumOfProducts { get; set; } 
} 

... 이상과 같이? SORTORDER 및 NumOfProducts
public class ViewModelProductCategory 
{ 
    public IEnumerable<ProductCategory> ProductCategory { get; set; } 
    //public int NumOfProducts { get; set; }//<--Not too sure about this property 
    public IEnumerable<Product> Products { get; set; } 
} 

두 번째는 하나 "올바른"에 가까운 경우

(현재 범주에 얼마나 많은 제품입니다) 어떻게 할 수 있습니까?

그리고 내가 가장 혼란스럽게 생각하는 것은 면도기 렌더링이 어떻게 이루어 지는지입니다. 뷰 모델을 재귀 부분 뷰로 보내려면 어떻게해야하며 부분 뷰는 렌더링 할 항목을 어떻게 알 수 있습니까?

면도기 코드가 있지만 게시를 통해 달성하려는 내용이 더 명확 해지지 않을 수도 있습니다.

이 의사 코드는 아마도 더 설명된다

_recursivePartial.cshtml 
@model [my unknown viewmodel goes here, is it IEnumerable or not?] 
<ul> 
foreach item in model 
{ 
    <li>@Html.Partial("_recursivePartial.cshtml", [what goes here?]) 
    // 1: How does _recursivePartial.cshtml know where in the tree it is? 
    // 2: How does this structure relate to the data structure in the DB? 
} 
</ul> 
+0

https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components - 나는 같은 임무를 밟고 있습니다. –

답변

2

내가 일을하는 "올바른"방법이 있는지 모르겠지만, 내가보기 모델에 다른 내 데이터베이스 모델을 유지하는 것을 좋아합니다. 모델간에 데이터를 얻으려면 종종 AutoMapper을 사용합니다. 상황에

아마이 개보기 모델 거라고 :

public class ProductCategoryItemModel 
{ 
    public int Id { get; set; } 
    public int? ParentId { get; set; } 
    public string Title { get; set; } 
    public int SortOrder { get; set; } 
    public int NumOfProducts { get; set; } 
} 

public class ProductCategoriesModel 
{ 
    public List<ProductCategoryItemModel> Categories { get; set; } 
} 

난 항상 ToList을 (변환)이 아니라 뷰를 IEnumerable을 통과하는 것보다,하지만 다시 난 그것이 "올바른"방법인지 확실하지 않습니다.