在post方法foreach循环中,对象引用未设置为对象的实例

本文关键字:设置 对象 实例 对象引用 方法 post foreach 循环 | 更新日期: 2023-09-27 18:20:29

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

我还希望能够收集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 的in部分得到了以下错误

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

在post方法foreach循环中,对象引用未设置为对象的实例

我想您所需要做的就是在同一表单上输入5个好友对朋友来说是个不错的解决方案。

型号

public class MyModel
{
    public List<Friend> FriendList {get; set;}
}
public class Friend
{
    public int Id {get; set;}
    public string Name {get; set;}
}

Razor

<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>

控制器

public ActionResult MyAction(MyModel model)
{
    foreach(var f in model.FriendList)
    {
      db.Friends.Add(f);
      db.SaveChanges();
    }
}

附言:你的代码可能会因你朋友的型号而异。

是的,当然。你可以用剃须刀也可以不用剃须刀。

@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
}