4

我的视图模型包含一个整数列表,我遇到的问题是,当我发送修改后的表单视图模型时,它总是等于 null。

我的视图模型:

public class testViewModel
 {
    public List<int> itemTest { get; set; 
 }

我的控制器中的操作:

比如我会尝试对表格中输入的新值求和,但是计算出来的总和总是等于0,没有任何变化。

      public ActionResult form(int nbre)
    {
        testViewModel montest = new testViewModel()
        {
            itemTest = new List<int>()
        };

        for(int i=0;i<nbre ;i++)
        {
           montest.itemTest.Add(0);
        }
        return View(montest);
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult form(testViewModel maListe)
    {
        int somme = 0;
        if (maListe.itemTest != null)
        {
            if (maListe.itemTest.Count() != 0)
            {

                foreach (var item in maListe.itemTest)
                {
                    somme += item;
                }
            }
        }

        //listtest = maListe;
        return RedirectToAction("test2", new { qte = somme });
    }

我的观点

  @model MvcWebRole1.ViewModels.testViewModel
  @{
     ViewBag.Title = "Formulaire";
   }

  @using (Html.BeginForm())
  {
     @Html.AntiForgeryToken()
     @Html.ValidationSummary(true)
  <table>
  @foreach (var item in Model.itemTest)
  {
    <tr >
       <td >
         @Html.Label("Quantitée")
       </td>
       <td>
        @Html.EditorFor(model => item)
        @Html.ValidationMessageFor(model => item)
       </td>
    </tr>

  }
 </table>
   <input type="submit" value="Valider" />
  }

谢谢你帮助我

4

3 回答 3

4

您需要为集合中的每个项目编制索引。您的代码的问题似乎是使用foreach。您真的想使用for并通过EditorFor调用传入索引。

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

这仅适用于永远不会更改其顺序的有序列表。如果您想重新排序项目,我建议您阅读 Phil Haack 关于将列表发送到服务器的精彩帖子。

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

于 2013-06-10T12:47:53.267 回答
3

列表绑定

<form>
@for(int i=0;i<Model.itemTest.Count ;i++)
{
    @Html.TextBoxFor(x=>x.itemTest[i])
    //or just <input type="text" name="itemTest "/> working to
}

于 2013-06-10T12:45:50.230 回答
1
 for(int i=0;i<nbre ;i++)
        {
           montest.itemTest.Add(0);
        }
        return View(montest);

看起来你正在用零而不是 i 填充你的 int 数组。这应该读montest.itemTest.Add(i);

于 2013-06-10T12:12:12.153 回答