我有一个棘手的问题,无法弄清楚如何摆脱它。
我有一个需求,需要以表格形式显示MVC视图,如下所示:
发票号码 ProductName
111
/T1459.3-1991商品商品、产品、商品
/T1583-1991商品商品、商品、技术等
/T1291-1996商品、商品、技术等
113 --商品
这样做的想法是,如果产品列表属于相同的发票号,则不要重复发票号。
下面这样简单的预测重复了发票号:
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.InvoiceNumber)
</td>
<td>
@Html.DisplayFor(modelItem => item.ProductName)
</td>
</tr>}
我可以根据我的要求改变模型。
如有任何帮助,将不胜感激。
发布于 2014-12-11 16:08:23
这不是完整的例子,但您必须按照下面的方法来解决问题。
@{
var previousItem = "";
}
@foreach (var item in Model) {
<tr>
<td>
@if(previousItem != item.InvoiceNumber)
{
previousItem = item.InvoiceNumber.ToString();
@Html.DisplayFor(modelItem => item.InvoiceNumber)
}
</td>
<td>
@Html.DisplayFor(modelItem => item.ProductName)
</td>
</tr>
}发布于 2014-12-11 16:13:54
思考这个问题的最好方法不是如何避免重复,而是从一开始就把视图模型塑造成这样。
例如,你的模型应该是..。
var model = new Dictionary<string,List<string>>();那你就可以..。
@foreach(var item in Model)
{
<tr>
<td> @item.Key </td>
<td>
@foreach(var product in item.Value)
{
@product<br/>
}
</td>
<tr>
}发布于 2014-12-11 16:14:07
使用Linq,您可以对项目进行分组:
@foreach (var group in Model.GroupBy(x => x.InvoiceNumber)) {
<!-- first group item -->
<tr>
<td>
@Html.DisplayFor(modelItem => group.First().InvoiceNumber)
</td>
<td>
@Html.DisplayFor(modelItem => group.First().ProductName)
</td>
</tr>
foreach(var item in group.Skip(1)){
<tr>
<td>
</td>
<td>
@Html.DisplayFor(modelItem => item.ProductName)
</td>
</tr>
}}或者作为单行选择:
@foreach (var group in Model.GroupBy(x => x.InvoiceNumber)) {
<tr>
<td>
@Html.DisplayFor(modelItem => group.Key)
</td>
<td>
foreach(var item in group){
<p>@Html.DisplayFor(modelItem => item.ProductName)</p>
}
</td>
</tr>
}我承认,对于这个例子来说,这可能有点过分,但是我想看到不同的方法是很好的。
https://stackoverflow.com/questions/27427207
复制相似问题