2015-06-02 53 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

相關問題