如何为强类型数据模型列表取多个值.NET-MVC-5内部剃刀代码

本文关键字:NET-MVC-5 内部 代码 剃刀 强类型 数据模型 列表 | 更新日期: 2023-09-27 18:05:49

我有强类型视图模型,我需要从用户为强类型列表获取多个"列表"记录。我正在努力实现这在剃刀代码。这是[httpget]方法。

视图模型
public class AccommodationApplicationViewModel
{
    public AccommodationApplicationViewModel() 
    {
        _RentingApplicationModel = new PropertyRentingApplication();
        _PropertyRentingPriceModel = new List<PropertyRentingPrice>();
        _AdditionalTenantModel = new List<AdditionalTenant>();
        _StudentLimitedInfoModel = new List<StudentLimitedInfo>();
    }
    public PropertyRentingApplication _RentingApplicationModel { get; set; }
    public List<PropertyRentingPrice> _PropertyRentingPriceModel { get; set; }
    public List<AdditionalTenant> _AdditionalTenantModel { get; set; }
    public List<StudentLimitedInfo> _StudentLimitedInfoModel { get; set; }
}
<<h2>剃刀代码/h2>
<div>
    <div class="form-group">
        @Html.LabelFor(model => model._StudentLimitedInfoModel[0].StudentNumber_UWLID, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            //@Html.EditorFor(model => model._StudentLimitedInfoModel[0].StudentNumber_UWLID, new { htmlAttributes = new { @class = "form-control", @readonly = "readonly" } })
            @Html.ValidationMessageFor(model => model._StudentLimitedInfoModel[0].StudentNumber_UWLID, "", new { @class = "text-danger" })*@
        </div>
    </div>

下一行出现错误
@Html.EditorFor(model => model._StudentLimitedInfoModel[0].StudentNumber_UWLID, new { htmlAttributes = new { @class = "form-control", @readonly = "readonly" } })

错误是:

索引超出范围。必须非负且小于集合的大小。参数名称:index

如何为强类型数据模型列表取多个值.NET-MVC-5内部剃刀代码

您可以采用以下两种方法之一。如果列表中有固定数量的项,您可以简单地使用适当数量的实例初始化它。例如:

_PropertyRentingPriceModel = new List<PropertyRentingPrice>
{
    new PropertyRentingPrice(),
    new PropertyRentingPrice(),
    new PropertyRentingPrice()
};

这样就有三个项目。然后,在你看来:

@for (var i = 0; i < Model._PropertyRentingPriceModel.Count(); i++)
{
    @Html.EditorFor(m => m._PropertyRentingPriceModel[i].Foo)
}

如果项目更灵活,或者用户需要能够随意添加或删除项目,则需要JavaScript解决方案,这将涉及手动创建输入并为其分配适当的名称。为此,我建议使用某种支持模板的数据绑定库,比如Knockout或Angular。这样做会让你的生活更轻松。在构建JavaScript模板时,您只需要记住模型绑定器期望在POST请求中看到的集合输入名称的约定:CollectionProperty[Index].Property。例如,您的输入需要看起来像这样:

<input type="text" name="_PropertyRentingPriceModel[0].Foo" value="" />

我不得不做一些类似的事情,最后使用了我在这里找到的一篇文章来做这件事。我发布了我的实现,但我必须自定义它,它会混淆你要找的东西。