【问题标题】:How to pass two sets of data to a view?如何将两组数据传递给一个视图?
【发布时间】:2009-10-29 10:27:24
【问题描述】:

如何将两组数据传递给 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 帮助吗?

提前感谢您的帮助。

【问题讨论】:

    标签: asp.net-mvc linq views partial-views


    【解决方案1】:

    将数据传递给视图的最佳方式是为您的视图提供一个特定的 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)
    

    【讨论】:

      【解决方案2】:

      您不必像现在这样零碎地将数据项分配给 ViewData。如果由于某种原因您无法传递 CallRepository 对象,那么您可以创建另一个数据对象来保存您的打开和所有调用存储库数据并传递它。

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

      【讨论】:

        【解决方案3】:

        您可以将 ViewData 存储在模型对象中并传递它。这个is explained very well in PRO ASP.NET MVC chapter 9

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-02-03
          • 1970-01-01
          • 2011-08-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多