将一个模型中的2个列表返回到MVC中的视图

时间:2015-03-20 23:47:33

标签: c# asp.net-mvc

我是MVC的新手,我正在努力使用viewmodels。我想将同一模型中的2个列表返回到一个视图中。我将需要2个foreach循环来显示不同状态的记录"在一个视图上。因为两个列表都来自一个模型,是否有必要创建一个视图模型?

我尝试过以下操作,但我的观点是找不到每个列表的项目类型。

 public class PipelineViewModel
 {
    public int LeadID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Status{ get; set; }
    public string LoanAgent{ get; set; }

    public List<WebLead> PipeNewLeads { get; set; }
    public List<WebLead> PipeDispLeads { get; set; }
}

注意List是我从中提取列表的表的域模型。这是对的吗?

接下来在我的控制器中:

    public ActionResult Index(string LoanAgent)
    {
        var viewModel = new PipelineViewModel
        {
            PipeNewLeads = db.WebLeads
            .Where(l => l.LoanAgent.Equals(LoanAgent) && l.Status.Equals("New")).ToList(),
             PipeDispLeads = db.WebLeads
            .Where(l => l.LoanAgent.Equals(LoanAgent) && l.Status.Equals("Disp")).ToList(),
         };
        return View(viewModel);

我知道控制器错了。我需要以某种方式引用viewmodel,但我已经尝试了几种方法并且不断出错。

在视图中,我使用了

@model LoanModule.ViewModels.PipelineViewModel

我试图像这样调用每个列表,但它没有用。

@foreach (var item in Model.PipeNewLead)
@foreach (var item in Model.DispNewLead)

我想我差不多了,但我不确定我在控制器中做错了什么。我将不胜感激任何帮助或参考!

2 个答案:

答案 0 :(得分:1)

考虑你:

public ActionResult Index(string LoanAgent)
{
    var viewModel = new PipelineViewModel
    {
        PipeNewLeads = ....
        PipeDispLeads = ....
     };
    return View(viewModel);
}

您的观点foreach应为:

@foreach (var item in Model.PipeNewLeads)
@foreach (var item in Model.PipeDispLeads)

注意拼写; - )

这对我来说非常好:

    public ActionResult Contact()
    {
        var viewModel = new PipelineViewModel
        {
            PipeNewLeads = new List<WebLead>(),
            PipeDispLeads = new List<WebLead>(),
        };
        return View(viewModel);
    }

并查看:

@model WebApplication1.Controllers.PipelineViewModel
@foreach (var item in Model.PipeDispLeads)
{
    <p>Disp</p>
}
@foreach (var item in Model.PipeNewLeads)
{
    <p>New</p>
}

您的问题出在其他地方。

我会:

  1. 查看您引用IEnumerable<PipelineViewModel>的位置并找出原因。这很可能是在一个完全不同的Razor视图中,因此使该错误无关。
  2. 检查您的实体框架返回的内容。你得到的EF错误可能是因为:
    • 数据库不可用
    • EF模型与数据库不同
    • 登录问题
    • 网络问题
  3. 显然,您的EF错误可能会有所不同,但这些是一些建议

答案 1 :(得分:0)

遇到这个问题......我认为这只是一个错字。

您在模型中有public List<WebLead> PipeNewLeads { get; set; },但视图中有@foreach (var item in Model.PipeNewLead)。注意复数,所以当然你看到了你得到的例外(未找到/不包含)。