在一个``中合并多个``。 ASP.NET MVC3

时间:2011-08-11 12:59:05

标签: asp.net-mvc-3 merge partial-views

我有一个ASP.NET MVC3项目。

我想在一个表<td>中插入一些<tr>。这些<td>各包含一个<div>。这些来自一个switch(),它位于partialView中并呈现到另一个视图中(<tr>可以包含多个<td>)。

这是partialView:

@foreach (var item in Model)
{
   switch (item.PitlaneId)
       {
           case 1:
                   <td id=a>
                       <div class="drag">
                           Name: @Html.DisplayFor(modelItem => item.Name) <br />
                           Constrainted: @Html.DisplayFor(modelItem => item.Constrainted) <br />
                       </div>
                   </td>
           break;

           case 2:
                   <td id=b>
                       <div class="drag">
                           Name: @Html.DisplayFor(modelItem => item.Name) <br />
                           Constrainted: @Html.DisplayFor(modelItem => item.Constrainted) <br />
                       </div>
                   </td>
           break;

           case 3:
                   <td id=c>
                       <div class="drag">
                              Name: @Html.DisplayFor(modelItem => item.Name) <br />
                              Constrainted: @Html.DisplayFor(modelItem => item.Constrainted) <br />
                          </div>
                   </td>
           break;

           default: break;
       }
}

这个partialView在这里呈现:

<table title="test" id="testTableID">
   <colgroup> @foreach (var item in Model){<col width="300" />} </colgroup>
   <tbody>
      <tr>
         @{Html.RenderAction("Tasks"); }  @* <--- Here it renders*@
      </tr>
   </tbody>
</table>

当switch()多次转到同一个案例时,会出现问题。如果我有这个顺序的PitlaneId:1,2,2,3;它将在我的表中创建4个<td>。在这种情况下,我应该只有3 <td>个,并且具有相同PitlaneId = 2的两个<div>应该在同一个<td>内。 我的意思是<td>具有相同的ID应合并在一起。当PitlaneId按此顺序排列时的情况相同:1,2,3,2。

1 个答案:

答案 0 :(得分:0)

这是我能让它发挥作用的唯一方法。它看起来很臭,但它提供了你指定的元素的顺序。

@Html.Raw("<table><tr><th>ID 1</th><th>ID 2</th><th>ID 3</th></tr><tr>")

@foreach (int id in Model.OrderBy(p => p.PitlaneID)
    .Select(p => p.PitlaneID).Distinct())
{ 
    switch(id)
    {
        case 1:  
            @:<td id="a">
            break;
        case 2:  
            @:<td id="b">
            break;
        case 3:  
            @:<td id="c">
            break;
        default: break;
    }

    foreach (var item in Model.Where(p => p.ID == id))
    { 
        <div class="drag">
            Name: @Html.DisplayFor(modelItem => item.Name) <br />
            Constrainted: @Html.DisplayFor(modelItem => item.Constrainted) <br />
        </div>
    }

    Html.Raw("</td>");
}

@Html.Raw("</tr></table>")