質問

2つのデータセットをASP.NET MVCのビューに渡す方法を教えてください

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

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ヘルプを表示しますか?

事前にお問い合わせいただきありがとうございます。

役に立ちましたか?

解決

ビューにデータを渡す最良の方法は、必要なデータのみを含むビューの特定のViewDataを実際に用意することです。

マジック文字列( ViewData(&quot; MyOpenCallCount&quot;))の代わりに、このビューに必要なすべてのデータを含む特定のクラスを定義します(私の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)

他のヒント

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

そして、それは長期的には実際により柔軟な設計です。

ViewDataをモデルオブジェクトに保存して渡すことができます。この PRO ASP.NET MVC 9章で非常によく説明されています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top