为每个项目创建动态数量的列

时间:2014-06-06 23:25:19

标签: asp.net-mvc razor dynamic model

我有一个模板制作工具,可以创建记分卡,可能有10个部分,每部分最多10个问题。在创建我的MVC视图时,我只想显示有问题的部分。我的数据库表中有一个列,其中包含各个部分的计数,每个部分我都有一列表示该部分中的问题数量。我试过这个,但模型绑定不喜欢插入动态名称。我想这可能是我的语法。以下是我尝试但不起作用:

@foreach (var item in Model)
            {


                <tr>
                    <td>
                        @Html.DisplayFor(modelItem => item.Description)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.DepartmentId)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.TotSections)
                    </td>

                    @for (var i = 0; i < item.TotSections; i++ )
                    {
                        var section = 1;

                        var SN = "S" + section + "Name";
                        var SNUP = "S" + section + "NumUP";
                        var SNQ = "S" + section + "NumQuest";

                        <td>
                            @Html.DisplayFor(modelItem => item[SN])
                        </td>
                        <td>
                            @Html.DisplayFor(modelItem => item[SNUP])
                        </td>
                        <td>
                            @Html.DisplayFor(modelItem => item[SNQ])
                        </td>
                    }

                    <td>
                        @Html.ActionLink("Edit", "Edit", new { id = item.TemplateId }) |
                        @Html.ActionLink("Details", "Details", new { id = item.TemplateId }) |
                        @Html.ActionLink("Delete", "Delete", new { id = item.TemplateId })
                    </td>
                </tr>
            }

有没有办法做到这一点,还是我需要重新思考?

提前致谢。

编辑:

如果我有一个带有一个部分的Scorcard模板,静态表行将如下所示:

@foreach (var item in Model)
            {
                <tr>
                    <!--These are Constant for each item-->
                    <td>
                        @Html.DisplayFor(modelItem => item.Description)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.DepartmentId)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.TotSections)
                    </td>

                    <!--BELOW IS WHERE I AM HAVING THE PROBLEM-->
                    <!--I want to create these columns dynamically,--> 
                    <!--depending on how many sections in column '**TotSections**' above-->
                    <td>
                        @Html.DisplayFor(modelItem => item.S1Name)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.S1NumUP)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.S1NumQuest)
                    </td>

                    <!--Below will be constant for each table row-->

                    <td>
                        @Html.ActionLink("Edit", "Edit", new { id = item.TemplateId }) |
                        @Html.ActionLink("Details", "Details", new { id = item.TemplateId }) |
                        @Html.ActionLink("Delete", "Delete", new { id = item.TemplateId })
                    </td>
                </tr>
            }

如果有两个部分:

@foreach (var item in Model)
            {
                <tr>
                    <!--These are Constant-->
                    <td>
                        @Html.DisplayFor(modelItem => item.Description)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.DepartmentId)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.TotSections) 
                    </td>

                    <!--BELOW IS WHERE I AM HAVING THE PROBLEM-->
                    <!--I want to create these columns dynamically,--> 
                    <!--depending on how many sections in column '**TotSections**' above-->
                    <td>
                        @Html.DisplayFor(modelItem => item.S1Name)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.S1NumUP)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.S1NumQuest)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.S2Name)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.S2NumUP)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.S2NumQuest)
                    </td>

                    <!--Below will be constant-->

                    <td>
                        @Html.ActionLink("Edit", "Edit", new { id = item.TemplateId }) |
                        @Html.ActionLink("Details", "Details", new { id = item.TemplateId }) |
                        @Html.ActionLink("Delete", "Delete", new { id = item.TemplateId })
                    </td>
                </tr>
            }

结束视图如下所示:

enter image description here

您可以在TotSections栏中看到:

测试模板1 有1个部分。如果我使用静态视图模型显示这些列,则不应显示列,并且应该在不显示列时显示列。如上图所示,当它只有一个时,它显示了2个部分。

测试模板2 有6个部分,但只显示6个列中的2个,因此缺少4个部分的列。

我最初发布的代码是尝试从item.TotSections获取部分数量,然后动态创建部分列。

希望这更清楚

0 个答案:

没有答案