首页 > 解决方案 > 如何通过 ID 访问 IEnumerable 模型的第 2 项(或 3 或 ...x)

问题描述

我正在寻找最佳实践。我有一些有用的东西,但我不知道它是否“正确”。

我正在构建一个页面,客户可以在其中输入三种不同类型许可证的付款数据。我正在发送我的许可证的 IEnumerable。它包含 3 个空许可证。

澄清:最终用户可以拥有 1、2 或 3 个许可证,并且每个许可证都具有独特的类型——“钓鱼”、“划船”或“特许权”。

我围绕这个概念构建了视图:

<div class="form-group row">
            <div class="col-md-2" align="right" style="padding-top:5px">
                <strong>@Html.LabelFor(model => model.FirstOrDefault().Notes, "Notes:", htmlAttributes: new { @class = "control-label" })</strong>
            </div>
            <div class="col-md-9">
                <div class="row">
                    <div class="col-md-4" align="left">
                        @Html.EditorFor(model => model.Take(1).FirstOrDefault().Notes, new { htmlAttributes = new { @class = "form-control" } })
                        @Html.ValidationMessageFor(model => model.Take(1).FirstOrDefault().PermitTypeId, "", new { @class = "text-danger" })
                    </div>
                    <div class="col-md-4" align="left">
                        @Html.EditorFor(model => model.Skip(1).Take(1).FirstOrDefault().Notes, new { htmlAttributes = new { @class = "form-control" } })
                        @Html.ValidationMessageFor(model => model.Skip(1).Take(1).FirstOrDefault().PermitTypeId, "", new { @class = "text-danger" })
                    </div>
                    <div class="col-md-4" align="left">
                        @Html.EditorFor(model => model.Skip(2).Take(1).FirstOrDefault().Notes, new { htmlAttributes = new { @class = "form-control" } })
                        @Html.ValidationMessageFor(model => model.Skip(2).Take(1).FirstOrDefault().PermitTypeId, "", new { @class = "text-danger" })
                    </div>
                </div>
            </div>
        </div>

客户为每种适当的付款类型输入数据,保存按钮将数据发回,我检查每种付款类型是否不为空,然后照常处理。

这是正确的方法吗?有没有更好的办法?

任何输入将不胜感激。

问候, 卡萨克斯

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

解决方案


您可以foreach在标记中使用循环来遍历可枚举。

<div class="form-group row">
    <div class="col-md-2" align="right" style="padding-top:5px">
        <strong>@Html.LabelFor(model => model.FirstOrDefault().Notes, "Notes:", htmlAttributes: new { @class = "control-label" })</strong>
    </div>
    <div class="col-md-9">
        <div class="row">
            foreach (var item in Model)  
            {  
                <div class="col-md-4" align="left">
                    @Html.EditorFor(modelItem => item.Notes, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(modelItem => item.PermitTypeId, "", new { @class = "text-danger" })
                </div>
            }
        </div>
    </div>
</div>

推荐阅读