0

如何将两组数据传递给 ASP.NET MVC 中的视图?

我已经尝试了几件事,但都没有奏效,所以我得出了一个简单的结论:我做错了。

我有 2 个查询:

callRepository.FindOpenCalls()callRepository.FindAllMyCalls(user)

我想通过 2 个部分视图(分别为 OpenCalls.ascx 和 AssignedCalls.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

显然它只返回打开的调用,但我想返回 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。如果由于某种原因您无法传递 CallRepository 对象,那么您可以创建另一个数据对象来保存您的打开和所有调用存储库数据并传递它。

从长远来看,这种设计实际上更加灵活。

于 2009-10-29T10:35:13.407 回答
0

您可以将 ViewData 存储在模型对象中并传递它。这在 PRO ASP.NET MVC 第 9 章中有很好的解释

于 2009-10-29T10:41:30.680 回答