2009-10-29 4 views
0

ASP.NET MVC에서 두 세트의 데이터를보기로 전달하는 방법은 무엇입니까?뷰에 두 세트의 데이터를 전달하는 방법은 무엇입니까?

나는 두 가지 시도를 해봤지만 어느 것도 효과가 없으므로 간단한 결론에 도달했다. 나는 잘못하고있다.

는 I 2 개 쿼리를 가지고

callRepository.FindOpenCalls()

callRepository.FindAllMyCalls(user) 및 I 아웃 (각각 OpenCalls.ascx 및 AssignedCalls.ascx) 2 개 부분보기를 통해 하나의 뷰 데이터 세트 모두를 넣을.

내 CallsController.vb의 Index() 함수를 사용하여이 작업을 수행하고 싶습니다. 순간

나는이 :

분명히 단지 오픈 호출을 반환
' 
' GET: /Calls/ 

<Authorize()> _ 
Function Index() As ActionResult 
    ViewData("OpenCallCount") = callRepository.CountOpenCalls.Count() 
    ViewData("UrgentCallCount") = callRepository.CountUrgentCalls.Count() 
    ViewData("HighCallCount") = callRepository.CountHighCalls.Count() 
    ViewData("NormalCallCount") = callRepository.CountNormalCalls.Count() 
    ViewData("LowCallCount") = callRepository.CountLowCalls.Count() 

    ViewData("MyOpenCallsCount") = callRepository.CountMyOpenCalls(Session("LoggedInUser")).Count() 
    ViewData("UserName") = Session("LoggedInUser") 

    Dim viewOpenCalls = callRepository.FindAllOpenCalls() 
    Dim viewMyOpenCalls = callRepository.FindAllMyCalls(Session("LoggedInUser")) 

    Return View(viewOpenCalls) 
End Function 

,하지만 난 viewOpenCalls과 viewMyOpenCalls 모두를 반환하고 싶습니다.

어떻게 해결할 수 있습니까?

내 LINQ 도움말을 표시하겠습니까?

사전에 도움을 주셔서 감사합니다.

답변

2

데이터를보기로 전달하는 가장 좋은 방법은 필요한 데이터 만 포함하여보기에 특정보기 데이터를 실제로 저장하는 것입니다. 대신 마법 문자열을 갖는

(ViewData("MyOpenCallCount"))이보기에 필요한 모든 데이터를 포함하는 특정 클래스 정의 (내 VB.Net 경우 미안 조금 녹슨) :

public class CallInfo 
    public OpendCallCount as int 
    public UrgentCallCount as int 
    'etc. 
end class 

public class CallViewData 
    public AllCalls as CallInfo 
    public MyCalls as CallInfo 
    public UserName as String 
end class 

그리고 강력한 형식의 뷰를 사용 ViewPage(of CallViewData)에서 파생 된이 방법을 사용하면 인텔리 센스가 있으며 정보를 얻기 위해 하드 코딩 된 문자열로 고생 할 필요가 없습니다.

모든 호출과 현재 사용자 호출의 정보로 CallViewData를 채우고이 인스턴스를 반환합니다.

Dim data as new CallViewData 
    data.AllCalls = new CallInfo {OpenCallCount = ... } 
    'etc 
    return View(data) 
0

ViewData에 데이터 항목을 할당 할 필요가 없습니다. 어떤 이유로 CallRepository 객체를 전달할 수 없다면 생성 할 수 있고 열려있는 모든 콜 저장소 데이터를 저장하고 전달할 다른 데이터 객체를 생성 할 수 있습니다.

그리고 그것은 실제로 장기적으로 훨씬 더 유연한 디자인입니다.

관련 문제