了解Asp .net MVC的基本概念

时间:2017-02-24 09:44:00

标签: asp.net-mvc

我试图用图片展示产品,但我遇到了问题 显示图像,我认为有很多我不明白

  • 我的第一步是显示每个产品的媒体,因为该表已经有一个外键MediaID,我认为我的模型很适合这一步
  • 第二步是制作ProductMedia表或关联,以便产品有多张图片,主键由productId和mediaId组成

我迷失在这两个步骤的中间,通常我的视图写的方式我希望能够至少显示默认图片,每个产品必须具有的媒体列表中的第一个

当我在我的家庭控制器中放置一个断点时,我可以看到每个产品 有一个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; }

        }

1 个答案:

答案 0 :(得分:1)

您不需要定义ProductMedia表,因为您的关系似乎是1-many。

第三个表在许多关系中定义。 每个产品都有多个媒体,每个媒体都属于一个产品。

您的模型不需要MediaId,我认为它是默认图片的ID。

您需要做的是在控制器内拉出与每个产品相关的媒体。这样的事情:

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;">
 }