2017-02-24 108 views
0

我試圖展示產品圖片,但我有一個問題 顯示圖像,我覺得有很多我不明白理解的ASP.NET MVC基本概念

  • 我的第一步是顯示每個產品的媒體,因爲表已經有了一個外鍵MediaID,我認爲我的模型對於這一步很好
  • 第二步是製作一個ProductMedia表或關聯以便讓產品有幾張圖片,主鍵將由productId和mediaId組成

我迷失在這2個步驟的中間,通常我的視圖寫入的方式我希望能夠至少顯示默認圖片,每個產品必須具有的媒體列表中的第一個

當我在家庭控制器中放置一個斷點時,我可以看到每個產品 都有一個mediaId,但我不知道在哪裏以及如何將圖片添加到介質列表中,因此毫不奇怪,該列表爲空並且沒有圖像在我的任何產品

我的HomeController的

public ActionResult Index(string searchString) 
    { 
     var products = from p in dc.Products 
         select p; 

     .... 
     return View(products); 
    } 

這是我HomeIndex

@foreach (var p in Model) 
    { 
     <div class="col-lg-4 col-sm-4 hero-feature text-center"> 
      <div class="thumbnail"> 
       <a href="@Url.Action("Details", "Product", new { id = p.ProductID })" class="link-p" style="overflow: hidden; position: relative;"> 


        **@if (p.Medium.Count > 0) 
        { 
         <img src="@p.Medium.ElementAt(0).MediaUrl" alt="" style="position: absolute; width: auto; height: 257px; max-width: none; max-height: none; left: 1px; top: 0px;"> 
        }** 
       </a> 
       <div class="caption prod-caption"> 
        <h4><a href="@Url.Action("Details", "Product", new { id = p.ProductID })">@p.ProductName.Substring(0, 1).ToUpper()@p.ProductName.Substring(1).ToLower()</a></h4> 
        <p>@p.ProductDescription</p> 
        <p> 
        </p> 
        <div class="btn-group"> 
         <a href="#" class="btn btn-default">@p.Prices.OrderBy(pr => pr.PriceDate).FirstOrDefault().PriceValue</a> 
         @*     <a href="#" class="btn btn-primary"><i class="fa fa-shopping-cart"></i>Buy</a>*@ 
         @Html.ActionLink("Buy!", "Create", "Cart", new { id = p.ProductID, quantity = 1 }, new { @class = "btn btn-primary" }) 
        </div> 
        <p></p> 
       </div> 
      </div> 
     </div> 
    } 

介質是在產品 的模型中定義介質的列表中的每個產品都有數家媒體,它看起來像這樣

public partial class Product 
     { 
      public Product() 
      { 

       .... 
       this.Medium = new HashSet<Medium>(); 
      } 

      public int ProductID { get; set; } 
      .... 
      public int MediaID { get; set; } 
      .... 

      public virtual ICollection <Medium> Medium { get; set; } 

     } 
+0

請注意,模型 - 視圖 - 控制器標籤是關於模式的問題。 ASP.NET-MVC實現有一個特定的標籤。 –

回答

1

你並不需要定義ProductMedia因爲你的關係似乎是1-many。

第三個表在許多關係中定義。每個產品有多個媒體,每個媒體都屬於一個產品。

您的模型不需要MediaId,我認爲它是默認圖片的ID。

你需要做的就是拉每種產品的controller.Something內像這樣的媒體:

public ActionResult Index(string searchString) 
{ 
    var products = dc.Products.ToList(); 

    foreach(p in products) 
    { 
     //I assume that your Medium table has a column named ProductID which is a foreign key to Product table 
     p.Medium = dc.Medium.Where(x => x.ProductID == p.ProductID).ToList(); 
    } 
    return View(products); 
} 

內,您的看法,改變評價if語句來此,以顯示默認媒體您的產品:

@if (p.Medium != Null && p.Medium.Any()) 
{ 
     <img src="@p.Medium.First().MediaUrl" alt="" style="position: absolute; width: auto; height: 257px; max-width: none; max-height: none; left: 1px; top: 0px;"> 
} 
+0

感謝Efe,但我的媒體沒有productID – bob

+0

因此,您無法將媒體與產品關聯。在一對多關係中,依賴實體必須擁有獨立實體的外鍵。在你的場景中,產品是獨立的。也就是說,沒有產品,媒體是沒有意義的,但產品是獨立的實體,不管它是否有媒體。將ProductId添加到媒體表格。如果您將媒體用於新聞或用戶等其他實體,則應將NewId或UserId添加到媒體表中。 – Efe

+0

由於搞亂查詢控制器代碼是一個壞主意,我建議你爲將來的項目使用實體框架AutoMapper – Efe