2012-05-31 3 views
1

지난 1 월 반 동안이 답변을 찾으려고 노력했지만 때로는 너무 가깝지만 지금까지는 행운이없는 것 같습니다. LINQ 쿼리를 정의한 컨트롤러가 있는데 목록 뷰에 결과를 전달하는 방법을 파악하려고합니다. 다음은 컨트롤러 코드 :컨트롤러에서 뷰로 데이터 전달

:

namespace CMS.Controllers 
{ 
    public class SurveyController : Controller 
    { 

     private SupportEntities supdb = new SupportEntities(); 
     private BuisnessEntities bsdb = new BuisnessEntities(); 

     // 
     // GET: /Survey/BizSurveyC 

     public ViewResult BizSurveyC(string nipaKey, string bOrg) 
     { 
      // use the next two lines for testing and then either delete or comment them out. 
      nipaKey = "22"; 
      bOrg = "MPC"; 

      var Cquery = from Mstr in bsdb.BizOrgInsts 
            join Dat in bsdb.BizSurveyQ on Mstr.ID equals Dat.MASTERID 
            where Mstr.NIPAKEY == nipaKey & Mstr.FULCIRCORG == bOrg 
            orderby Mstr.STREETSUFX, Dat.ADDRESS, Mstr.NUMBER 
            select new { MasterId = Mstr.ID, Name = Mstr.OLDNAME, Mstr.ADDRESS, Mstr.NIPAKEY, Dat.SURVEYDATE, SurveyId = Dat.ID, Dat.RESURVEYOF, Dat.STAMP }; 

      //ViewBag.BizQuery = Cquery; 
      ViewData["BizQuery"] = new SelectList(Cquery); 

      return View(); 
     } 

    } 
} 

당신은 내가을 ViewData와 Viewbag하지만 지금까지 행운으로 여기


이 일이 지금 표시하는 방법을 시도 보면 알 수 있듯이

의 ViewModel 클래스

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace CMS.Models 
{ 
    public class BizSurveyCVM 
    { 
     public long? MasterId { get; set; } 
     public string Name { get; set; } 
     public string Address { get; set; } 
     public string NipaKey { get; set; } 
     public string Date { get; set; } 
     public long? SurveyId { get; set; } 
     public long? Resurvey { get; set; } 
     public string DateStamp { get; set; } 
    } 
} 

수정 작업

 var Cquery = (from Mstr in bsdb.BizOrgInsts 
            join Dat in bsdb.BizSurveyQ on Mstr.ID equals Dat.MASTERID 
            where Mstr.NIPAKEY == nipaKey & Mstr.FULCIRCORG == bOrg 
            orderby Mstr.STREETSUFX, Dat.ADDRESS, Mstr.NUMBER 
            select new BizSurveyCVM 
            { 
             MasterId = Mstr.ID, 
             Name = Mstr.OLDNAME, 
             Address = Mstr.ADDRESS, 
             NipaKey = Mstr.NIPAKEY, 
             Date = Dat.SURVEYDATE, 
             SurveyId = Dat.ID, 
             Resurvey = Dat.RESURVEYOF, 
             DateStamp = Dat.STAMP 
            }).ToList(); 

     return View(Cquery); 
    } 

BizSurveyC보기

@model List<CMS.Models.BizSurveyCVM> 

<table> 
    <tr> 
     <th> 
      MasterId 
     </th> 
     <th> 
      Name 
     </th> 
     <th> 
      Address 
     </th> 
     <th> 
      NipaKey 
     </th> 
     <th> 
      Date 
     </th> 
     <th> 
      SurveyId 
     </th> 
     <th> 
      Resurvey 
     </th> 
     <th> 
      DateStamp 
     </th> 
     <th></th> 
    </tr> 

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.MasterId) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Name) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Address) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.NipaKey) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Date) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.SurveyId) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Resurvey) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.DateStamp) 
     </td> 
</table> 
여기

결과이다 :

미안 아직 이미지를 저장 허용하지만보기에 내가 가지고 있지 HEADERS하지만 데이터가 .

분명히보기 또는 쿼리에서 할 일이 있지만 모든 사람의 도움 덕분에 상황이 훨씬 나아졌습니다. 대단히 감사합니다

+0

MVC 버전은 무엇입니까? – RedFilter

+2

보기 코드를 알려주십시오. – swapneel

+0

당신이 지금까지 가지고있는 것은 괜찮습니다. 그래서 뷰에서 viewdata를 호출하는 방법이 문제라고 생각됩니다. – Brian

답변

0
return View(Cquery); 

또는

return View("ViewName",Cquery); 

다음보기에서 모델 유형이 Cquery의 유형과 일치해야

. 그러나 나는 그 방법 본체에서 마우스 오른쪽 버튼을 클릭하고 "뷰 추가"를 클릭하고 모델 유형 목록에서 모델을 선택하기 위해 VS를 사용한다고 가정하면 더 쉽습니다.

+0

이것은 어떤 모델 유형을 사용하겠습니까? 아니면 어떤 방식 으로든 조인을 모델로 사용해야합니까? –

+0

링크 된 목록 또는 사전? 먼저 변환을 처리하는 한 원하는 유형을 거의 사용할 수 있습니다. 사전 경로를 원한다면 youd는 조인을 반복하고 Dictionary 를 빌드합니다. 그런 다음 사전을보기로 전달하고보기에서 사전을 받아들입니다. –

0

정말 원하십니까?

보기에서 컬렉션이 더 유용하므로 선택 목록처럼 필요한 모든 것을 만들 수 있습니다.

잊지 말고 누가 다음과 같이 선택 목록에 자신의 데이터 값과 표시 값을 정의했는지 잊지 마세요 ..

ViewData["BizQuery"] = new SelectList(Cquery, null, "MasterId", "Name"); 

좋아, 당신의 코드는이

@foreach (SelectListItem item in (SelectList)ViewData["BizQuery"]) 
{ 

    <p>@item.Text</p> 

} 
2

당신과 같은 무언가가 필요

을 ViewData에서 개체의 정확한 캐스팅을 수행해야합니다, 저를 위해 작동하므로보기를 확인 쿼리 결과가 무엇이든 보유 할 ViewModel 클래스를 만든 다음 새 ViewModel 클래스에 대한보기를 강력하게 입력 할 수 있습니다.

ViewModel Clas 의 :

public class BizSurveyCVM 
{ 
    public long MasterId { get; set; } 
    public string Name { get; set; } 
    ... 
} 

수정 작업 :

var Cquery = (from Mstr in bsdb.BizOrgInsts 
       join Dat in bsdb.BizSurveyQ on Mstr.ID equals Dat.MASTERID 
       where Mstr.NIPAKEY == nipaKey & Mstr.FULCIRCORG == bOrg 
       orderby Mstr.STREETSUFX, Dat.ADDRESS, Mstr.NUMBER 
       select new BizSurveyCVM { MasterId = Mstr.ID, Name = Mstr.OLDNAME, ...} 
      ).ToList(); 

return View(Cquery); 

BizSurveyC보기

@model List<{namespace}.BizSurveyCVM> 

@foreach(var item in Model) { 
    {HTML Mark-up} 
} 

편집 : 여기에 업데이트 된 질문에 따라 뷰의 업데이트 된 예입니다 :

@model List<{namespace}.BizSurveyCVM> 

@foreach(var item in Model) { 
    <tr> 
     <td> 
      @item.MasterId 
     </td> 
     <td> 
      @item.Name 
     </td> 
     <td> 
      @item.Address 
     </td> 
     ... 
    </tr> 
} 
+0

두 번 이상 그런 종류의 모델을 사용한다면이 방법이 제 것보다 나은 해결책 일 것입니다. 한 번만 사용한다면 아마도 약간의 잔인한 행동 일 것입니다. –

+0

나는 이것을 좋아하고 지금 그것을 시도하고있다. 이것은 나에게 익숙하다. 나는 그것이 어떻게 나오는지 모두에게 알릴 것이다. –

+0

수정 된 코드는 끝났지 만 formatingI 때문에 게시 할 수 없습니다. 도움말을 읽고 알아낼 수 있는지 확인합니다. 또한 아직 작동하지 않습니다. 다음과 같은 오류 메시지가 나타납니다. 사전에 전달 된 모델 항목의 형식이 'System.Collections.Generic.List'1입니다. [<> f__AnonymousType4'8 [System.Nullable'1 [System.Int64], System.String, System.String, System.String, System.Nullable'1 [System.Int64], System.Nullable'1 [System.Int64], System.String]] '이 사전에는 형식의 모델 항목이 필요합니다. 'System.Collections.Generic.List'1 [CMS.Models.BizSurveyCVM]'. –

관련 문제