0

我想要一个与对象相关的表单+与属性相关的对象列表

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。(如果我很好理解,它应该可以工作)

你有解决方案让它工作吗?

4

1 回答 1

2

您的ChargeLot“属性”没有 getter 或 setter,因此模型绑定器无法用发布的数据填充它。它只是一个标准的实例变量而不是一个属性,并且您的模型上没有任何东西设置它。你需要:

public List<ChargeLotModel> ChargeLot { get; set; }
于 2013-06-11T21:54:51.603 回答