剃刀中的表,依赖于数据库的行

时间:2016-06-27 13:24:28

标签: c# asp.net asp.net-mvc razor

我正在尝试创建一个包含7行和27列的表。最高的列应位于表格的顶部。

该模型如下所示:

public partial class tblShelve
{
    public int id { get; set; }
    public string name { get; set; } //For example B-01-07 means column 1, row 7
    public int capacity { get; set; } // I am using this to style the cells
    public int row { get; set; }
    public int column { get; set;}
}

我的HomeController返回:

private ScanningContext db = new ScanningContext();

// GET: Home
public ActionResult Index()
{
    return View(db.tblShelves
        .Where(x => x.name.StartsWith("B"))
        .OrderByDescending(x => x.column)
        .ThenBy(x => x.row)
        .ToList()
        );
}

我的Index.cshtml代码看起来像这样

@model IEnumerable<Shelves_Visualisation.Models.tblShelve>
...
    <table>

            @foreach (var item in Model)
            {

                    if (item.name.StartsWith("B-01"))
                    {
                        @:<tr class="my-tr">
                        //old: <tr class="my-tr">
                    }

                    @switch (item.capacity)
                    {
                        case (0):
                            <td class="classic-height my-td empty">@item.name</td>
                            break;
                        case (50):
                            <td class="classic-height my-td half-full">@item.name</td>
                            break;
                        default:
                            <td class="classic-height my-td full">@item.name</td>
                            break;
                    }


                @if(item.name.StartsWith("B-27"))
                {
                    @:</tr>
                    //old: </tr>
                }
            }
    </table>

但它只是创建一个空页面。 Visual Studio告诉我,<tr>元素未关闭且</tr>没有匹配的开始标记。任何想法如何解决这一问题? (Response.Write不是一个选项,因为它只是将输出放在<body>标记之外的页面开头。没有<tr>标签上的条件就可以了,所以我知道错误必须在那里。

结果应如下所示: enter image description here

我是从静态html中得到的,我生成的是这样的:

   <table>
        @for (int i = 7; i > 0; --i)
        {
            <tr>
                @for (int j = 1; j < 28; ++j)
            {
                switch (rnd.Next(0, 3))
                {
                    case (0):
                            <td class="classic-height my-td full">B-@String.Format("{0,2:D2}", j)-@String.Format("{0,2:D2}", i)</td>
                            break;
                        case (1):
                            <td class="classic-height my-td half-full">B-@String.Format("{0,2:D2}", j)-@String.Format("{0,2:D2}", i)</td>
                            break;
                        default:
                            <td class="classic-height my-td empty">B-@String.Format("{0,2:D2}", j)-@String.Format("{0,2:D2}", i)</td>
                            break;
                    }
                }
            </tr>
        }
    </table>

1 个答案:

答案 0 :(得分:1)

以这种格式使用Tr标签到Html.raw @ Html.Raw(&#34;&#34;) 以及关闭tr标签,即@ Html.Raw(&#34;&#34;)

编辑:还必须将其用于<td>标记。