0

ASP.NET MVC のビューに 2 セットのデータを渡すにはどうすればよいですか?

私はいくつかのことを試しましたが、どちらもうまくいかなかったので、単純な結論に達しました:私はそれを間違っています。

2 つのクエリがあります。

callRepository.FindOpenCalls()callRepository.FindAllMyCalls(user)

そして、2 つの部分ビュー (それぞれ OpenCalls.ascx と AssignedCalls.ascx) を介して、両方のデータ セットを 1 つのビューに出力したいと考えています。

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 を表示すると役立つでしょうか?

事前に助けてくれてありがとう。

4

3 に答える 3

2

ビューにデータを渡す最良の方法は、必要なデータのみを含む、ビューの特定の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)
于 2009-10-29T10:39:18.593 に答える
0

ViewDataをモデルオブジェクトに格納して渡すことができます。これは、PROASP.NETMVCの第9章で非常によく説明されています

于 2009-10-29T10:41:30.680 に答える
0

あなたがやっているようにデータ項目を ViewData に少しずつ割り当てる必要はありません。何らかの理由で CallRepository オブジェクトを渡すことができない場合は、開いているすべての呼び出しリポジトリ データを保持する別のデータ オブジェクトを作成して渡すことができます。

そして、それは実際には長期的にはるかに柔軟な設計です.

于 2009-10-29T10:35:13.407 に答える