我想要一个与对象相关的表单+与属性相关的对象列表
ex:名称和每个x项目:有效或无价格
注意:我知道项目数,它与另一个表有关。用户可以编辑所有数据。
如何使用ASP .Net MVC实现这一目标?
public class AddChargeModel
{
[Required]
[Display(Name = "Name")]
public string Nom { get; set; }
[Required]
public List<ChargeLotModel> ChargeLot;
}
public class ChargeLotModel
{
[Required]
[Display(Name = "IdLot")]
public int IdLot { get; set; }
[Display(Name = "Price")]
public decimal Price { get; set; }
[Display(Name = "Active")]
public bool Active { get; set; }
}
我将类AddChargeModel与我的视图相关联:
@model Models.AddChargeModel
@using (Html.BeginForm())
{
<label>@Html.LabelFor(m => m.Name)</label>
@Html.EditorFor(m => m.Name)
@Html.ValidationMessageFor(m => m.Name)
<table>
<tr>
<th>Price</th>
<th>Active</th>
</tr>
@for (var lotindex = 0; lotindex < ViewData.Model.ChargeLot.Count(); lotindex++)
{
<tr>
<td>@Html.EditorFor(model => model.ChargeLot[lotindex].Price) @Html.HiddenFor(model => model.ChargeLot[lotindex].IdLot)</td>
<td>@Html.EditorFor(model => model.ChargeLot[lotindex].Active)</td>
</tr>
}
</table>
<input type="submit" value="Valider" class="button" />
}
当我点击按钮时,我输入控制器功能:
[HttpPost]
public ActionResult Add(AddChargeModel model)
{
...
}
model.Name已填充,但未填充model.ChargeLot == null。
数组中的控件在网页上命名为ChargeLot_0__Price。 (如果我很好理解它应该有效)
你有解决方案让它发挥作用吗?
答案 0 :(得分:2)
您的ChargeLot
“属性”没有getter或setter,因此模型绑定器无法使用发布的数据填充它。它只是一个标准的实例变量而不是属性,并且模型上没有任何东西可以设置它。你需要:
public List<ChargeLotModel> ChargeLot { get; set; }