如何编写viewmodel以在一个视图中显示2个表并在它们之间进行连接

时间:2015-11-13 19:01:58

标签: asp.net-mvc linq asp.net-mvc-viewmodel

我在MVC 5中非常新,我想实现像这样的照片 my Tables

我在Index视图中有一个Bootstrap Carousel滑块从DB获取它们的图像,我希望在Index视图中显示(使用Linq)Good table然后当点击每条记录重定向到另一个页面并显示ProductInfo时, 非常感谢,

抱歉我的英文不好:/

我创建了3个像Shyju所说的View模型:

public class GoodVM
{
    public int Id { set; get; }
    public string Name { set; get; }
}

public class ProductImageVm
{
    public string Image { set; get; }
    public string Color { set; get; } 
}

public class ProductInfoVm
{
    public string ProductText { set; get; }
    public List<ProductImageVm> Images { set; get; } 
}

我创建了一个viewModel,就像M.Azad所说:

public class MyGoodVM
{
    public List<GoodVM> Goods { get; set;}
    public List<ProductInfoVm> ProductInfoes { get; set; }
    public List<ProductImageVm> ProductImages { get; set; }
}

我不知道如何在Controller中使用它们。我用Hadee代码: var cliente = context.Goods .Include(e => e.ProductInfoes) .Include(e1 => e1.Enderecos.ProductImages) .SingleOrDefault();

但我不知道是&#34;包括&#34;?仍然我的问题没有解决

3 个答案:

答案 0 :(得分:0)

您可以拥有像这样的视图模型

public class MyViewModel
{
public List<Good> Goods { get; set;}
public List<ProductInfo> ProductInfoes { get; set; }
Public List<ProductImage> ProductImages { get; set; }
}

有关更多信息,请查看此MVC ViewModel

答案 1 :(得分:0)

为您的观点创建视图模型。

public class GoodVm
{
    public int Id { set; get; }
    public string Name { set; get; }
}

public class ProductVm
{
    public string ProductText { set; get; }    
    public List<ProductImageVm> Images { set; get; }                 
}
public class ProductImageVm
{
    public string Image { set; get; }
    public string Color { set; get; }    
}

对于索引视图,您需要获取所有商品

public ActionResult Goods()
{
  var vm = GetGoods();
  return View(vm);
}
private List<GoodVm> GetGoods()
{    
  return db.Goods.Select(s=> new GoodVm { Id = s.GoodID, Name = s.GoodName}).toList();
}

您的索引视图将绑定到GoodVM列表

@model List<GoodVm>
@foreach(var item in Model)
{
  <h2>@item</h2>
  @Html.ActionLink("view","View","Product",new {id=item.Id},null)
}

对于您的ProductInfo页面,接受一个好的Id并使用它来查询ProductInfo表

 public ActionResult View(int id)
 {
   var productVmList=GetProducts(id);
   return View(productVmList);
 }

 private List<ProductVm> GetProducts(int goodId)
 {
   return db.ProductInfos.Where(h=>h.Id==goodId)
              .Select(s => new ProductVm
               {
                 ProductText = s.InfoText,
                 Images = s.ProductImages.Select(c => new ProductImageVm
                 {
                   Color = c.Color,
                   Image = c.Image
                }).ToList()
             });
 }

您的视图将绑定到ProductVm

列表
@model List<ProductVm>
@foreach(var p in Model)
{
  <h2>@p.ProductText</h2>
  foreach(var img in p.Images)
  {
    <h3>@img.Color</h3>
  }
}

答案 2 :(得分:0)

使用M.Azad视图模型。然后在控制器中使用索引方法,编写类似(example)的代码:

var cliente = context.Goods 
   .Include(e => e.ProductInfoes)
   .Include(e1 => e1.Enderecos.ProductImages)
   .SingleOrDefault();

因此,您将看到相关的对象。为了显示你的表,它“更好地使用Bootstrap模态(here)。使用模态可以帮助您保持相同的视图,而无需在视图之间传输对象。