如何为强类型数据模型列表取多个值.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
您可以采用以下两种方法之一。如果列表中有固定数量的项,您可以简单地使用适当数量的实例初始化它。例如:
_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="" />
我不得不做一些类似的事情,最后使用了我在这里找到的一篇文章来做这件事。我发布了我的实现,但我必须自定义它,它会混淆你要找的东西。