2017-09-24 3 views
0

속성 ID를 기준으로 이미지를 검색하려고합니다.조건이있는 뷰백에서 데이터를 검색 할 수 있습니다.

하나의보기 가방에있는 모든 속성 텍스트 데이터를 가져 오는 중 ViewBag.tblProperty이라고 말하면 다른 뷰백의 모든 이미지를 ViewBag.tblImages으로 가져옵니다. 내가 ViewBag.tblProperty에서 점점 PropertyID의 기준으로 ViewBag.tblImages에서 이미지를 검색 할

@foreach (System.Data.DataRow dr in ViewBag.tblProperty.Rows) 
{  
    <ul class="[email protected]["PropertyID"] [email protected]["PropertyID"]"> 
    @foreach (System.Data.DataRow dr in ViewBag.tblimages.where(@dr["PropertyID"]).Rows) 
    { 
     <li><a href="@dr["FileName"]"><img src="@dr["FileName"]" /></a></li> 
    } 
    </ul> 
} 

:

내 코드입니다.

어떻게하면됩니까?

+1

이것은 'ViewBag'의 남용과 같습니다. 'DataTables'는 강력한 형식이 아니며 그 위에'ViewBag'에 할당합니다. 'Datatable'을 컨트롤러의 목록으로 변환 한 다음 View에서 사용하십시오. – adiga

답변

1

ViewBag은 항목을 동적 유형으로 저장하는 사전입니다. 그래서 먼저 DataTable 해당 변환해야하고 당신이 Where 절을 나중에 사용할 수있는 익명 개체의 목록에 데이터 테이블을 변환 할 AsEnumerable 방법을 사용할 수 있습니다

당신의 tblImages를 가정하는 것은 Id, FileNameParentId 속성이 있습니다

@{ 
    var imgsDt = ViewBag.tblimages as DataTable; 
    var imageList = imgsDt.AsEnumerable().Select(t => new 
    { 
     Id = t.Field<int>("Id"), 
     FileName= t.Field<string>("FileName"), 
     ParentId = t.Field<int>("ParentId"), 
    }).ToList(); 
} 
@foreach (var dr in ViewBag.tblProperty.Rows) 
{ 
    var id = (int) dr["Id"]; 

    <div> 
     <span>@dr["Name"]</span> 
     @foreach (var imgItem in imageList.Where(d=>d.ParentId== id)) 
     { 
      <div>@imgItem.FileName</div> 
     } 
    </div> 
} 

당신은보기의 상단에 @using System.Data를 추가해야합니다.

간단히하기 위해 div 안에 이름/속성 값을 인쇄하기 위해 마크 업을 업데이트했습니다.

이 문제가 해결 될 수 있지만 데이터를 전송할 때 ViewBag와 함께 DataTable을 사용하지 않는 것이 좋습니다 (). 코드는 유지하기가 어려울 것입니다. 뷰 모델 클래스를 만들고 액션 메서드에서 뷰 모델에 데이터를로드하고 뷰 모델을 뷰에 보냅니다. 이 방법을 사용하면 어떤 종류의 데이터 액세스가 사용되고 있는지 알 수 없으며 매우 깨끗하고 읽기 쉽습니다.

사용자 정의 ado.net 코드를 작성하는 경우 SqlDataReader을 사용할 수 있습니다. 엔티티를 나타내는 POCO 클래스를 만들고 그 엔티티에 할당하십시오. 그것에 대해 인터넷에 샘플 톤이 있습니다.

+0

또한'using System.Data'를 추가해야합니다. – adiga

+0

다음은 DataReader 및 사용자 지정 POCO 클래스를 통해 데이터를 가져 오는 샘플 게시물입니다. https://stackoverflow.com/questions/37092862/how-to-iterate-data-from-two -columns-into-single-select-box-in-asp-net-mvc/37093256 # 37093256 (처음 부분 만) – Shyju

+0

예제로 뷰 모델을 전달하는 방법을 설명 할 수 있습니다 –

관련 문제