我是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)
我想我差不多了,但我不确定我在控制器中做错了什么。我将不胜感激任何帮助或参考!
答案 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>
}
您的问题出在其他地方。
我会:
IEnumerable<PipelineViewModel>
的位置并找出原因。这很可能是在一个完全不同的Razor视图中,因此使该错误无关。显然,您的EF错误可能会有所不同,但这些是一些建议
答案 1 :(得分:0)
遇到这个问题......我认为这只是一个错字。
您在模型中有public List<WebLead> PipeNewLeads { get; set; }
,但视图中有@foreach (var item in Model.PipeNewLead)
。注意复数,所以当然你看到了你得到的例外(未找到/不包含)。