可以在具有foreach条件的单元格中显示多个项目吗? [英] Is it possible to display more than one item in a cell with a foreach condition?
问题描述
我认为通过图片可视化比我解释我想要的更容易。 现在我有第一个,但是我遇到的问题是我的表格像这样动态地填充:
@model IEnumerable< MyApp.Models.OrderDetail>
@foreach(Model中的var item)
{
< tr>
< td align =center>
@ Html.DisplayFor(modelItem => item.OrderId)
< / td>
< td>
@ Html.DisplayFor(modelItem => item.Order.Username)
< / td>
< td>
@ Html.DisplayFor(modelItem => item.Order.ClientID)
< / td>
< td>
@ Html.DisplayFor(modelItem => item.Order.SiteNumber)
< / td>
< td>
@ {
if(item.Pack == null)
{
@ Html.DisplayFor(modelItem => item.Product.Name)
}
else
{
< text> Pack< / text>
@ Html.DisplayFor(modelItem => item.Pack.Name)
}
}
< / td>
< td>
@if(item.Pack == null)
{
@ Html.DisplayFor(modelItem => item.UnitPrice)
}
else
{
@ Html.DisplayFor(modelItem => item.UnitPricePack)
}
< / td>
< td align =center>
@ Html.DisplayFor(modelItem => item.Quantity)
< / td>
< td>
@ Html.DisplayFor(modelItem => item.Order.Total)
< / td>
< td>
@ Html.DisplayFor(modelItem => item.Order.OrderDate)
< / td>
< / tr>
.....
我在互联网上没有发现除Interface之外没有,但是在我的级别似乎有点复杂,如果我使用它,我必须更改我的所有代码。一个主意 ?我采取所有建议,谢谢你的帮助
这是我的模型:
OrderDetails
public class OrderDetail
{
public int OrderDetailId {get;组; }
public int OrderId {get;组; }
public int ProductId {get;组; }
public int PackId {get;组; }
public int数量{get;组; }
[范围(0.00,100000.00)]
public decimal UnitPrice {get;组; }
[范围(0.00,100000.00)]
public decimal UnitPricePack {get;组; }
public virtual Product Product {get;组; }
public virtual Pack Pack {get;组; }
public virtual Order Order {get;组; }
public virtual List< Product>产品{get;组; }
public virtual List< Pack>包{get;组;
}
产品
public class Product
{
[ScaffoldColumn(false)]
public int ProductId {get;组; }
[DisplayName(Pack)]
public int PackId {get;组;
[必需(ErrorMessage =blabla)]
[StringLength(160)]
[DisplayName(Nom)]
public string Name {get ;组; }
[DisplayName(Description)]
[StringLength(200)]
public string说明{get;组; }
[必需(ErrorMessage =blabla)]
[范围(0.00,10000.00,ErrorMessage =blabla)]
[DisplayName(Prix)]
public decimal价格{get;组; }
public virtual Pack Pack {get;组; }
public virtual List< OrderDetail> OrderDetails {get;组;
}
和我的包模型
public class Pack
{
[ScaffoldColumn(false)]
public int PackId {get;组; }
[DisplayName(blabla)]
public string Name {get;组; }
[DisplayName(blabla)]
public string说明{get;组; }
[必需(ErrorMessage =blabla)]
[范围(0.00,10000.00,ErrorMessage =blabla)]
[DisplayName(Prix )]
public decimal价格{get;组; }
public List< Product>产品{get;组; }
public virtual List< OrderDetail> OrderDetails {get;组; }
}
假设你有一个ViewModel像这样
public class OrderViewModel
{
public int OrderID {set; get;}
public string UserName {set; get;}
public int UserID {set; get;}
public List< OrderItem>产品{set; get;}
public decimal OrderTotal {set; get;}
}
public class OrderItem
{
public string ProductID {set ; get;}
public string ProductName {set; get;}
public decimal UnitPrice {set; get;}
public int数量{set; get;}
}
现在在您的看法
code> @model List< OrderViewModel>
@foreach(模型中的var order)
{
< tr>
< td> @ order.OrderID< / td>
< td> @ order.UserName< / td>
< td>
< ul>
@foreach(var item in order.Products)
{
< li> @ item.ProductName< / li>
}
< / ul>
< / td>
< td>
< ul>
@foreach(var item in order.Products)
{
< li> @ item.Quantity< / li>
}
< / ul>
< / td>
< td>
< ul>
@foreach(var item in order.Products)
{
< li> @ item.UnitPrice< / li>
}
< / ul>
< / td>
< td>
@ order.OrderTotal
< / td>
< / tr>
}
I think it's more easier to visualise with picture than I explain what I want. There is any way to have a table looks like the second one on the picture? Now I've the first, but the problem that I have is that my table is populate dynamically like this :
@model IEnumerable<MyApp.Models.OrderDetail>
@foreach (var item in Model)
{
<tr>
<td align="center">
@Html.DisplayFor(modelItem => item.OrderId)
</td>
<td>
@Html.DisplayFor(modelItem => item.Order.Username)
</td>
<td>
@Html.DisplayFor(modelItem => item.Order.ClientID)
</td>
<td>
@Html.DisplayFor(modelItem => item.Order.SiteNumber)
</td>
<td>
@{
if (item.Pack == null)
{
@Html.DisplayFor(modelItem => item.Product.Name)
}
else
{
<text>Pack</text>
@Html.DisplayFor(modelItem => item.Pack.Name)
}
}
</td>
<td>
@if (item.Pack == null)
{
@Html.DisplayFor(modelItem => item.UnitPrice)
}
else
{
@Html.DisplayFor(modelItem => item.UnitPricePack)
}
</td>
<td align="center">
@Html.DisplayFor(modelItem => item.Quantity)
</td>
<td>
@Html.DisplayFor(modelItem => item.Order.Total)
</td>
<td>
@Html.DisplayFor(modelItem => item.Order.OrderDate)
</td>
</tr>
.....
I found nothing on the internet about that except Interface, but it seems a bit complicated at my level, and I must change all my code if I use it. An idea ? I take all advices, thank you for your help
Here are my models :
OrderDetails
public class OrderDetail
{
public int OrderDetailId { get; set; }
public int OrderId { get; set; }
public int ProductId { get; set; }
public int PackId { get; set; }
public int Quantity { get; set; }
[Range(0.00, 100000.00)]
public decimal UnitPrice { get; set; }
[Range(0.00, 100000.00)]
public decimal UnitPricePack { get; set; }
public virtual Product Product { get; set; }
public virtual Pack Pack { get; set; }
public virtual Order Order { get; set; }
public virtual List<Product> Products { get; set; }
public virtual List<Pack> Packs { get; set; }
}
Product
public class Product
{
[ScaffoldColumn(false)]
public int ProductId { get; set; }
[DisplayName("Pack")]
public int PackId { get; set; }
[Required(ErrorMessage="blabla")]
[StringLength(160)]
[DisplayName("Nom")]
public string Name { get; set; }
[DisplayName("Description")]
[StringLength(200)]
public string Description { get; set; }
[Required(ErrorMessage="blabla")]
[Range(0.00, 10000.00, ErrorMessage="blabla")]
[DisplayName("Prix")]
public decimal Price { get; set; }
public virtual Pack Pack { get; set; }
public virtual List<OrderDetail> OrderDetails { get; set; }
}
and my Pack model
public class Pack
{
[ScaffoldColumn(false)]
public int PackId { get; set; }
[DisplayName("blabla")]
public string Name { get; set; }
[DisplayName("blabla")]
public string Description { get; set; }
[Required(ErrorMessage="blabla")]
[Range(0.00, 10000.00, ErrorMessage="blabla")]
[DisplayName("Prix")]
public decimal Price { get; set; }
public List<Product> Products { get; set; }
public virtual List<OrderDetail> OrderDetails { get; set; }
}
Assuming you have a ViewModel like this
public class OrderViewModel
{
public int OrderID { set;get;}
public string UserName { set;get;}
public int UserID { set;get;}
public List<OrderItem> Products { set;get;}
public decimal OrderTotal { set;get;}
}
public class OrderItem
{
public string ProductID { set;get;}
public string ProductName { set;get;}
public decimal UnitPrice { set;get;}
public int Quantity { set;get;}
}
Now in your view
@model List<OrderViewModel>
@foreach(var order in Model)
{
<tr>
<td>@order.OrderID</td>
<td>@order.UserName</td>
<td>
<ul>
@foreach(var item in order.Products)
{
<li>@item.ProductName</li>
}
</ul>
</td>
<td>
<ul>
@foreach(var item in order.Products)
{
<li>@item.Quantity</li>
}
</ul>
</td>
<td>
<ul>
@foreach(var item in order.Products)
{
<li>@item.UnitPrice</li>
}
</ul>
</td>
<td>
@order.OrderTotal
</td>
</tr>
}
这篇关于可以在具有foreach条件的单元格中显示多个项目吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!