对象引用未设置为post方法foreach循环

时间:2015-11-03 20:42:03

标签: c# asp.net-mvc razor

我有一个页面,其中包含各种字段作为表单的一部分填写。

我还希望能够为您想要加入同一表格的朋友收集5组信息。

在剃须刀视图中,我设法显示相同的输入框5次,最多允许添加4个人但是我不知道如何将这些数据单独传回控制器以启用单个记录保存为4个盒子中的每一个。

继承了我使用过的剃刀代码:

<div class="col-md-offset-1">
    @for (int i = 0; i < 5; i++)
    {
        <div class="col-md-12">
            @Html.LabelFor(model => model.Friend) @i
            @Html.EditorFor(model => model.Friend)      
        </div>
    }
</div>

有没有办法可以将信息发回控制器参考剃刀代码中的i值?我需要知道如何处理post方法中的数据,建议的重复问题没有显示出来。

这是我的帖子控制器的开始,它将处理朋友的一个副本

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult AddFriend(AddFriendViewModel viewModel)
    {
        foreach(var f in model.FriendList)
         {
                var friend =
                new Friend
                {
                    Friend = f.Friend
                };
          db.Friends.Add(friend);
          db.SaveChanges();
         }

        return View("Success")
    }

然而,当我运行它时,我在foreach的

部分得到以下错误
  

对象引用未设置为对象的实例。

2 个答案:

答案 0 :(得分:1)

我想你需要做的就是在同一个表格上输入5个朋友。使用列表&lt;&gt;对于朋友来说将是一个很好的解决方案。

模型

React.createElement(Child, null)

剃刀

public class MyModel
{
    public List<Friend> FriendList {get; set;}
}

public class Friend
{
    public int Id {get; set;}
    public string Name {get; set;}
}

控制器

<div class="col-md-offset-1">
    @for (int i = 0; i < 5; i++)
    {
        <div class="col-md-12">
            @Html.LabelFor(model => model.FriendList[i].Name)
            @Html.EditorFor(model => model.FriendList[i].Name)      
        </div>
    }
</div>

PS:您的代码可能会因您的朋友型号而异。

答案 1 :(得分:1)

是的,当然。你可以使用或不使用剃刀来做到这一点。

@for (int i = 0; i < 5; i++)
{
    <div class="col-md-12">
        @Html.LabelFor(model => model.Friend) @i
        <input type="text" name="Friend[@i]" value="@Model.Friend[i]" />      
    </div>
}

接收数据的控制器应该是这样的,

public ActionResult MyAction(MyModel model)
{
    // model.Friend should be a list of string
}