본문으로 바로가기
.net core mvc // multiple column, single view with viewmodels - 바보처럼코딩하기

.net core mvc // multiple column, single view with viewmodels

반응형

 

참 다양한 방법이 많은듯한데...이 방법이 우선 적용됐다. 다른 방법들은 적용을 못해서 패스하고, 적용된것만 기록남김.

 

1) model에 Tbl1 하나가 있음(Entity...)

 

2) 이 Tbl1을 2개의 ViewModel로 가공을 했음

 

3) 이걸 하나의 뷰에 foreach로 보여주려고함.

 

4) 이것저것 찾아보면서 계속 실패하다가, 뜬금포 터진상황임.

 

--//Controller

 

//아랫줄의 Where이하는 무시하고(어차피 자기가 필요한 조건임) .Tolist(); 부분은 삽입.

var list = db.Tbl2거래입력.Where(x => x.업체코드 == UserNo && (x.날짜 >= Sdate1 && x.날짜 <= Edate1)).ToList();

 

//원래는 var list1 또는 list2 뒤에 var list1 = list.group이런식으로 위의 리스트를 가져와서 사용했으나,

계속된 오류의 해답으로,db.tbl로 시작하는 테이블을 직접 연결시켜주니 중복 코드가 사라졌다.

위의 list내용과 아래 핑크줄의 내용은 다르나, where이후 절은 이제 list를 치환해서 사용 안하므로 관계없다.

 

//첫번째 리스트 : 한가지 조건으로 묶음 (ViewBag 처리해줌 : list1)

var list1 = db.Tbl2거래입력.Where(x => x.업체코드 == 0)

.GroupBy(y => y.아이템명)

.Select(group => new T2거래ViewModel

{

아이템 = group.Key,

수량계 = group.Sum(x => x.수량)

})

.ToList();

.ToList();

ViewBag.list1 = list1;

 

--//두번째 리스트 쿼리 : 두가지 조건으로 묶음(ViewBag 처리해줌 : list2)

var list2 = db.Tbl2거래입력.Where(x => x.업체코드 == 0)

.GroupBy(y => new { y.색상명, y.아이템명, })

.Select(g => new T2거래1ViewModel

{

아이템 = g.Key.아이템명,

색상 = g.Key.색상명,

수량계 = g.Sum(x => x.수량)

})

.OrderBy(y => y.아이템)

.ToList();

ViewBag.list2 = list2;

 

return View();

}

 

------------컨트롤 부분 간략 설명----------------

1) db.안의 테이블을 model로 만들어 놓고, 조건에 맞춰서 리스트를 뽑음

2) 동일 테이블 첫번째 가공, viewmodel로 필요한 필드만 구성해서 만듦.

3) 동일 테이블 두번째 가공, viewmodel로 필요한 필드만 구성해서 만듦.

4) 리턴은 그냥 뷰로 넘김. viewbag에 리스트를 담았음.

----------------------------------------------------------

--//ViewModel (1) : 그냥 필요한대로 만듦

namespace web22.ViewModel

{

public class T2거래ViewModel

{

public string 아이템 { get; set; }

public double? 수량계 { get; set; }

}

}

 

--//ViewModel (2) : 그냥 필요한대로 만듦

namespace web22.ViewModel

{

public class T2거래1ViewModel

{

public string 아이템 { get; set; }

 

public string 색상 { get; set; }

public double? 수량계 { get; set; }

}

}

 

 

--//View : @model, @using 이런거 위에 안붙였음...그냥됌...(왜 되는건지 모르고 되는거 사용중)

<table class="table table-bordered">

<thead class="thead-dark">

<tr>

<th>아이템명</th>

<th>수량(YDS)</th>

</tr>

</thead>

<tbody>

@foreach (var mypage in ViewBag.list1)

{

<tr>

<td>@mypage.아이템</td>

<td>@mypage.수량계</td>

}

</tr>

}

</tbody>

</table>

 

<table class="table table-bordered">

<thead class="thead-dark">

<tr>

<th>아이템명</th>

<th>색상</th>

<th>수량(YDS)</th>

</tr>

</thead>

<tbody>

@foreach (var mypage in ViewBag.list2)

{

<tr>

<td>@mypage.아이템</td>

<td>@mypage.색상</td>

<td>@mypage.수량계</td>

}

</tr>

}

</tbody>

</table>

 

 

결론 : 검색어는 대략 multiple model (viewmodel) in one view (same view) 이런 키워드로 찾으면

뭔가 쭉 나옴...어떤 글은 이거 처리하는 10가지 방법 이런식으로 나오기도 함.

 

그런데...대부분의 글이 년식이 된 글임. (무슨뜻인고 하니...프로그램이 버전업되면서 좀 더 간소화 되었을수도 있음.

 

내가 하고자했던 부분중에서 위의 글이 linq group by sum같은 경우도 제일 간략한 방법? 쉬운방법으로 보임.

 

일단...개념 정리하고 감.

 

MS-SQL 의 테이블한개 tbl1이 model로 만들어 사용중임.

리스트 만들어서 뷰페이지에 한번 클릭에 나오는 테이블이 1개이상 필요했으나, 그게 어려워서 찾기 시작함.

찾은 방법과 개념.

 

한개의 모델을 2개의 뷰모델로 내가 뿌리고자하는 데이터 필드를 생성해줌.

 

콘트롤러에서 링크식을 사용해서 그 쿼리를 뷰벡에 담음

 

나머지는 foreach사용해서 in viewbag.list1, viewbag.list2 이런식으로 맞춰주기만 하면됨.

 

대부분의 글이 뷰모델을 콤바인해야 가능한것 처럼 나옴.

 

근데...그렇게 안해도 작동함.

 

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유