문제

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

나는 몇 가지를 시도했지만 효과가 없었기 때문에 간단한 결론에 도달했습니다. 나는 그것을 잘못하고있다.

2 개의 쿼리가 있습니다.

callRepository.FindOpenCalls() 그리고 callRepository.FindAllMyCalls(user)

그리고 나는 두 개의 부분 뷰 (OpenCalls.ASCX 및 할당 된 calls.ASCX)를 통해 두 데이터 세트를 하나의보기에 넣고 싶습니다.

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

오픈 통화 만 분명히 반환하지만 ViewOpenCall과 ViewMyOpenCalls를 모두 반환하고 싶습니다.

어떻게 갈까요?

내 LINQ를 보여줄까요?

미리 도움을 주셔서 감사합니다.

도움이 되었습니까?

해결책

데이터를보기로 전달하는 가장 좋은 방법은 실제로 필요한 데이터 만 포함하여 귀하의보기에 대한 특정 ViewData를 실제로 갖는 것입니다.

마법 줄을 갖는 대신 ( 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)

다른 팁

당신은 당신이하고있는 방식으로 데이터 항목을 단편적으로 볼 수있는 데이터 항목을 할당 할 필요가 없습니다. 어떤 이유로 든 Callrepository 오브젝트를 전달할 수없는 경우 열기 및 모든 호출 리포지토리 데이터를 유지하고 전달하는 다른 데이터 객체를 작성할 수 있습니다.

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

ViewData를 모델 객체에 저장하고 전달할 수 있습니다. 이것 Pro ASP.NET MVC 9 장에서 매우 잘 설명됩니다..

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top