可以将2个模型传递给视图吗?

时间:2012-08-16 08:32:13

标签: asp.net-mvc model-view-controller

我有一个必须呈现两个报告的视图。

我的行动:

public ActionResult TradeUKKPIShowData(SundaysInMonthViewModel model) //show actual data in the view
{
  var tradesmenReportData = _reportingService.GetTradeUKKPITradesmen(model.SelectedSunday);
  var jobSortedReportData = _reportingService.GetTradeUKKPIJobSorted(model.SelectedSunday);
  ViewBag.jobSortedReportDate = model.SelectedSunday;
  ViewBag.addJobSortedModel = jobSortedReportData;
  return View(tradesmenReportData);
}

我的第一个问题是上面两行动作。我必须通过什么? 我得到的那些行的编译错误:

'TradeUK.Services.IReportingService.GetTradeUKKPITradesmen(TradeUK.Entities.Reporting.KPIResults)'有一些无效的论点

报告所需的所有存储过程都是选择的日期/星期日

我的SundaysInMonthViewModel:

 namespace TradeUK.Admin.Web.ViewModels
 {
    public class SundaysInMonthViewModel
    {
       public IEnumerable<SelectListItem> AllSundays { set; get; }
       public string SelectedSunday { set; get; }
    }
 }

这里是IReportingServices.cs:

IEnumerable<KPIResults> GetTradeUKKPITradesmen(DateTime date);
IEnumerable<KPIResults> GetTradeUKKPIJobSorted(DateTime date);

和上面的实际方法:

 public IEnumerable<KPIResults> GetTradeUKKPITradesmen(DateTime date)
 {
 }


 public IEnumerable<KPIResults> GetTradeUKKPIJobSorted(DateTime date)
 {
 }

KPIResults:

namespace TradeUK.Entities.Reporting
{
 public class KPIResults
  {
   public virtual string Title { get; set; }
   public virtual int Total { get; set; }
   public virtual int Week6 { get; set; }
   public virtual int Week5 { get; set; }
   public virtual int Week4 { get; set; }
   public virtual int Week3 { get; set; }
   public virtual int Week2 { get; set; }
   public virtual int Week1 { get; set; }
  }
 }

另一个问题是返回(View(tradesmenReportData,jobSortedReportData)) 我可以这样做吗?在实际视图中,我必须使用循环来显示报告数据集。

请帮帮忙? 感谢

4 个答案:

答案 0 :(得分:3)

关于你的“第二期”:

不,你不能这样做,Model中只有一个ViewData。您应该为此案例创建单独的viewmodel(或使用Tuple)。

答案 1 :(得分:2)

您可以在ViewBag中正常传递第一个模型,然后传递

@model YourFirstModelClass

@{
    YourSecondModelClass model2 = ViewBag.YourSecondModel;
}

并且随之而来的是你想要的效果。

因此,当您不使用Razor时,可以添加主要强类型模型,如下所示:

<%@ Inherits="System.Web.Mvc.ViewPage<PrimaryModelClass>" %>

和ViewData中的第二个类似于ViewBag

答案 2 :(得分:0)

关于第二个问题,您可以创建一个具有两个表列属性的modelView类。从此模型类中,您可以在视图页面中查看数据并将数据保存在特定表中。

答案 3 :(得分:-1)

我在网上找到了这个可以为你做的链接。

https://weblogs.asp.net/dotnetstories/passing-multiple-models-to-a-view-in-an-asp-net-mvc-5-0-application

编辑: -

我链接的页面建议将一个对象列表传递给视图,列表由不同的模型组成,这是示例。

public ActionResult Index()
   {
         List<object> model = new List<object>();
         model.Add(ctx.ProductCategories.ToList());
         model.Add(ctx.Products.ToList());

        return View(model);
    }
}

然后在视图中,您可以再次将列表分解为单个模型,这是作者给出的示例: -

@model IEnumerable<object>

@{

    List<PassingMultipleModelsToAView.ProductCategory> lstPCategory = Model.ToList()[0] as List<PassingMultipleModelsToAView.ProductCategory>;

    List<PassingMultipleModelsToAView.Product> lstProduct = Model.ToList()[1] as List<PassingMultipleModelsToAView.Product>;
}

<h3>Categories</h3>

<ul>
    @foreach (var item in lstPCategory)
    {    
        <li>@item.Name</li>
    }
</ul>

<hr />

<h3>Products</h3>

<ul>
    @foreach (var item in lstProduct)
    {
        <li>@item.Name-@item.Color</li>
    }
</ul>
相关问题