C# ViewModel不工作。从两个表中显示
我正在尝试使用视图模型在视图中查看两个表中的信息,但它不起作用 这提供了两个包含信息的表格C# ViewModel不工作。从两个表中显示,c#,asp.net-mvc,asp.net-mvc-5,viewmodel,models,C#,Asp.net Mvc,Asp.net Mvc 5,Viewmodel,Models,我正在尝试使用视图模型在视图中查看两个表中的信息,但它不起作用 这提供了两个包含信息的表格 public class HeatImage { [Key] public int ImageId { get; set; } public string name { get; set; } } public class HeatingArea { [Key] public int ID { get; set; } public string Area
public class HeatImage
{
[Key]
public int ImageId { get; set; }
public string name { get; set; }
}
public class HeatingArea
{
[Key]
public int ID { get; set; }
public string Area { get; set; }
}
我的视图模型
public class HeatingAreaViewModel
{
public IEnumerable<HeatImage> heatingImage { get; set; }
public IEnumerable<HeatingArea> heatingArea { get; set; }
}
我的看法呢
@model IEnumerable<Project.Models.HeatingAreaViewModel>
@foreach (var item in Model)
{
<a href="~/folder/@item.heatingImage">@item.heatingArea</a>
}
@model IEnumerable
@foreach(模型中的var项目)
{
}
错误
传递到字典中的模型项的类型为
“Project.Models.HeatingAreaViewModel”,但此词典需要
类型的模型项
'System.Collections.Generic.IEnumerable'1[Project.Models.HeatingAreaViewModel]'
您的视图需要一个IEnumerable of HeatingAreaViewModel,似乎您只传递了一个实例 改变这个
@model IEnumerable<Project.Models.HeatingAreaViewModel>
然后,您将能够循环使用heatingrea
和heatingImage
这样的属性
@foreach (var item in model.heatingArea)
{
//what ever you need to do here
}
错误消息告诉它:视图需要
HeatingAreaViewModel
的IEnumerable
,而控制器操作只发送到视图HeatingAreaViewModel
因此,请更正控制器以发送
HeatingAreaViewModel
列表,或更正视图以仅期望HeatingAreaViewModel
的单个实例。如果您的问题是,如何在视图中的HeatingImage
和HeatingArea
两个列表中循环迭代,您必须重做viewModel:
public class HeatingAreaViewModel
{
public HeatImage heatingImage { get; set; }
public HeatingArea heatingArea { get; set; }
}
然后控制器动作:
public ActionResult Index()
{
heatingAreas = db.HeatingAreas.ToList();
heatingImages = db.HeatImages.ToList();
List<HeatingAreaViewModel> myModel = heatingAreas.Zip(heatingImages, (a, b) => new HeatingAreaViewModel {HeatingArea = a, HeatImage = b})
return View(mymodel);
}
public ActionResult Index()
{
heatingreas=db.heatingreas.ToList();
heatingImages=db.HeatImages.ToList();
List myModel=heatingreas.Zip(heatingImages,(a,b)=>newheatingreaviewmodel{heatingrea=a,heatingImages=b})
返回视图(mymodel);
}
然后视图将按原样工作
然而,我强烈建议不要这样做。您必须确保两个列表中的对应元素实际上是相互对应的。这很容易出错。如果有一个底层逻辑将这两个列表连接在一起(数据库表上的某些关系),我将使用该逻辑将列表/表连接在一起。只是视图中的模型与从控制器操作发送的不匹配,因此我认为您需要将视图更改为如下:
@model HeatingAreaViewModel
@foreach (var item in Model.heatingImage)
{
<a href="~/folder/@item.heatingImage">@item.heatingArea</a>
}
@model List<Project.Models.HeatingViewModel>
@foreach (var item in Model)
{
<p>item.HeatImage.Name</p>
<p>item.HeatingArea.ID (I have used ID because I don't know what your Area looks like)</p>
}
@模型加热区域视图模型
@foreach(Model.heatingImage中的变量项)
{
}
您正在通过appels发送邮件,并希望收到橙子,这就是您收到错误的原因
在控制器中,您通过一(一)个加热区域视图模型的实例进行发送。在您看来,您正在准备一个HeatingAreaViewModel
实例列表(超过1个)
在阅读回复时,您希望在每个循环迭代中同时使用HeatImage
和heatingrea
。您需要更改视图模型以适应此情况。例如,创建一个视图模型,该模型可以同时容纳:
public class HeatViewModel
{
public HeatImage HeatImage { get; set; }
public HeatingArea HeatingArea { get; set; }
}
您将此HeatViewModel
作为列表传递给您的视图
public ActionResult Index()
{
// This is just dummy code
HeatingViewModel model1 = new HeatingAreaViewModel();
// Populate the properties
model1.HeatImage = new HeatImage();
// Populate the properties
model1.HeatingArea = new HeatingArea();
HeatingViewModel model2 = new HeatingAreaViewModel();
// Populate the properties
model2.HeatImage = new HeatImage();
// Populate the properties
model2.HeatingArea = new HeatingArea();
// Now pass this list to the view
List<HeatingViewModel> models = new List<HeatingViewModel>();
return View(models);
}
…应该是
public HeatImage HeatImage { get; set; }
我希望这有帮助:)顺便说一句,在MVC下,它被称为模型而不是“视图模型”@米奇,有模特和模特。见此帖:@ᴉʞuǝ谢谢你提到我的帖子/答案。请格式化你的代码,以便更好地阅读。谢谢,但是我怎样才能使heatingArea和heatingImage都在同一个循环中?我想创建这个链接
,我不确定你能否在一个循环中迭代两个IEnumerable。你能解释一下你到底想做什么吗heatingImage
和heatingArea
是两个独立的列表。@Xtreme,哦,那么你正在尝试解决一个不同的问题,如何将两个列表放在一起,而不是如何在MVC视图中显示,我将编写第二个答案,查看该答案以获得解决方案和进一步的注释。我如何更改我的控制器?@Xtreme,您不更改控制器,而是将视图更改为model Project.Models.heatingreaviewmodel
,然后@foreach(model.heatingImage中的var项)
和/或@foreach(model.heatingrea中的var项)
@model List<Project.Models.HeatingViewModel>
@foreach (var item in Model)
{
<p>item.HeatImage.Name</p>
<p>item.HeatingArea.ID (I have used ID because I don't know what your Area looks like)</p>
}
public HeatImage heatImage { get; set; }
public HeatImage HeatImage { get; set; }