2015-06-02 17 views
0

这是一个带有Entity Framework的ASP.NET MVC4项目。 我需要在单个视图中使用2个表格Mvc4如何在单个视图中使用2个表格

我在我的数据库(预算和产品)中有2个表格。

模式

Budget.cs

public class Budget 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public ICollection<Product> Products { get; set; } 
} 

Product.cs

public class Product 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public decimal Value { get; set; } 
    public int BudgetId { get; set; } 
} 

BpDb

public class BpDb:DbContext 
{ 
    public DbSet<Budget> Budgets { get; set; } 
    public DbSet<Product> Products { get; set; } 
} 

MasterBP

public class MasterBP 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public List<Product> ProdName { get; set; } 
    public int CountOfValues { get; set; } 
} 

我需要一些关于控制器得到PRODNAME(标题从表产品)

public class HomeController : Controller 
{ 
    BpDb _db = new BpDb(); 
    public ActionResult Index() 
    { 
     var model=_db.Budgets 
      .Select(r=>new MasterBP 
      { 
       Id = r.Id, 
       Title = r.Title, 
       ProdName = r.Products.Where(s => s.BudgetId == r.Id).ToList(), 
       CountOfValues = r.Products.Count() 
      }); 
     return View(model); 
    } 
} 

我需要一种方式来获得的产品名称列表当BudgetId = ID(1个预算可以有多于1个产品)

而且我指数是这样的:

@model IEnumerable<MvcGg.Models.MasterBP>

@foreach (var item in Model) 
    { 
     <div> 
      <h4>@item.Title</h4> 
      @foreach (var product in item.ProdName) 
      { 
       @(product.Title.ToString()); 
      } 
      Values:@item.CountOfValues 
     </div> 
    } 

回答

1

这听起来像(纠正我,如果我错了),你要访问的两套实体在您的视图模型?

然后沿着这些路线的东西会做:

public class BudgetsViewModel 
{ 
    public IEnumerable<MasterBP> MasterBps { get;set; } 
    public IEnumerable<Product> Products { get;set;} 
} 

然后你只需检索所有数据并填充视图模型和它向下传递。

... 
var budgets =_db.Budgets 
      .Select(r=>new MasterBP 
      { 
       Id = r.Id, 
       Title = r.Title, 
       ProdName = r.Products.Where(s => s.BudgetId == r.Id).ToList(), 
       CountOfValues = r.Products.Count() 
      }); 
var model = new BudgetsViewModel() 
{ 
    MasterBps = budgets 
    //Products here 
} 

return View(model); 
... 

但是,如果你做了一些形式的服务层来处理对实体的检索和映射来查看,而不是在你的控制这一切的逻辑模型会更好。

0

最后这个解决我的问题,

型号

MasterBP

public class MasterBP 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public IEnumerable<Product> ProdName { get; set; } 
    public int CountOfValues { get; set; } 
} 

我换成List<>IEnumerable<>

控制器

public ActionResult Index() 
    { 
     var model=_db.Budgets 
      .Select(r=>new MasterBP 
      { 
       Id = r.Id, 
       Title = r.Title, 
       ProdName = r.Products.Where(s => s.BudgetId == r.Id).AsEnumerable(), 
       CountOfValues = r.Products.Count() 
      });  

     return View(model); 
    } 

另外我在AsEnumerable()变化ToList(),现在我可以用这个

查看看我的结果:

指数

@foreach (var item in Model) 
{ 
    <div> 
     @item.Title 
     <ul> 
      @foreach (var prod in item.ProdName) 
      { 

       <li>@prod.Title</li> 

      } 
     </ul> 
     <hr /> 
    </div> 
} 
+0

你没看到我的答案?或者尝试一下? – JonE

+0

@ Glitch100你的回答给了我这个想法,谢谢。 – turbotroy

+0

您可以请接受它,然后帮助其他会员遇到这个问题 – JonE

相关问题