我试图用图片显示产品,但我有问题要显示图像,我认为有很多我不了解
- 我的第一步是展示每个产品的媒体,因为桌子已经有了外国密钥媒体,我认为我的模型对此步骤 都很好
- 第二步是制作productMedia表或关联以允许产品拥有几张图片,主要键将由Productid和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; }
}
您不需要定义ProductMedia表,因为您的关系似乎是1个。
第三个表是在多种关系中定义的。每种产品都有多个媒体,每个媒体都属于单个产品。
您的模型不需要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;">
}