嵌套循环以在同一行

时间:2016-10-17 05:40:37

标签: asp.net-mvc asp.net-mvc-4 razor

我有存储过程来生成如下结果

enter image description here

我想显示如下结果

if (HeaderID and TitleNo same) 
show that results in same row 

else
 go to new row

enter image description here

所以我写了Razor页面,如下面的

                        <tbody>
                            @foreach (var item in Model)
                            {
                                <tr>
                                    <td rowspan="2" class="vertaline-mid">@item.TitleNo</td>
                                    <td rowspan="2" class="vertaline-mid">@item.TitleImage</td>

                                    @foreach (var image in Model)
                                    {
                                        <td class="image-td">
                                            <a>@image.SubtitleName</a>
                                            <span>@image.SubtitleValue</span>
                                        </td>
                                    }
                                </tr>
                                <tr>
                                    @foreach (var imageid in Model)
                                    {
                                        <td>@imageid.CaseID</td>
                                    }
                                </tr>
                            }                               
                        </tbody>

但是接下来我的观点就像是错误的

我甚至无法对此存储过程进行分组,这将对某些结果产生影响。

如何在客户端处理此问题。

enter image description here

2 个答案:

答案 0 :(得分:2)

您需要先按HeaderIDTitleN o对数据进行分组,然后将其投影到代表您需要显示的视图模型中。

查看模型(将这些重命名为与您的数据相关)

public class ParentVM
{
    public string TitleNo { get; set; }
    public int TitleImage { get; set; }
    public IEnumerable<ChildVM> SubTitles {  get; set; }
}
public class ChildVM
{
    public string SubtitleName { get; set; }
    public string SubTitleValue { get; set; }
    public int CaseID { get; set; }
}

,查询将是

var model = yourContext.GroupBy(x => new { x.TitleNo, x.HeaderID }).Select(x => new ParentVM
{
    TitleNo = x.Key.TitleNo,
    TitleImage = x.FirstOrDefault().TitleImage,
    SubTitles = x.Select(y => new ChildVM
    {
        SubtitleName = y.SubtitleName,
        SubTitleValue = y.SubTitleValue,
        CaseID = y.CaseID,
    })
});
return View(model);

并在视图中

@model IEnumerable<ParentVM>
....
<table>
    @foreach(var parent in Model)
    {
        <tr>
            <td>@parent.TitleNo </td>
            <td>@parent.TitleImage</td>
            @foreach(var child in parent.SubTitles)
            {
                <td>
                    <div>@child.SubtitleName</div>
                    <div>@child.SubTitleValue</div>
                    <div>@child.CaseID</div>
                </td>
            }
        </tr>
    }
</table>

答案 1 :(得分:0)

你可以使用linq组功能。 我现在在空港,所以我无法保证代码是完全正确的,但这个想法就是这个

@foreach(var g in Model.GroupBy(m=>m.TitleNo){
<tr>
<td>@g.Key</td>
<td>
<td>
@foreach(var gi in g){whatever codes you need to display}
</td>
</tr>
}