如何在asp.net mvc中使用for循环在form方法中插入多行

时间:2017-07-03 14:12:44

标签: asp.net-mvc asp.net-mvc-4

我在视图中编写了CREATE Operation的代码,它将使用带有for循环的form-tag在数据库中插入多个行。当点击“创建”按钮时,它将只保存一行,所以当我点击按钮时,我想要那个行。应该创建一行。

这里是View ..

的代码
@model CarParking.Models.Area


@for (int i = 1; i <= Model.NoOfParkingPlaces; i++)
{
    using (Html.BeginForm("Create", "ParkingPlace", FormMethod.Post))
    {
        <label>AreaID:</label>
        <input id="AreaID" name="AreaID" type="text" value="@Model.AreaID" />

        <label for="Parking_IDs">Parking IDs</label>
        <input type="text" value="P.Id: @i" name="PlaceId" />

        <input type="submit" value="Create" />
    }
}

这里是Controller的代码......

public ActionResult Create(string areaName)
    {
        Area area = db.Areas.SingleOrDefault(x => x.ParkingPlaceName == areaName);
        return View(area);
    }


    [HttpPost]
    public ActionResult Create([Bind(Include = "ParkID,PlaceId,CarID,AreaID")] ParkingPlace parkingPlace)
    {
        if (ModelState.IsValid)
        {
            db.ParkingPlaces.Add(parkingPlace);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(parkingPlace);
    }

这里有一些图片我的视图看起来enter image description here

1 个答案:

答案 0 :(得分:0)

您是说要立即在网页上发布所有表单吗?

如果是这样 - 它不能像那样工作......一种选择是使用javascript将AJAX全部发布,但正确的方法是使用一个表单,其中包含每个ParkingPlaces。

本文将详细介绍:http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx

@for( int i = 0; i < Model.NoOfParkingPlaces; ++i)
{
    @Html.EditorFor(m => m.ParkingPlaces[i].AreaId)
    @Html.EditorFor(m => m.ParkingPlaces[i].Id)  
    ... etc
}

并且您的操作参数变为;

public ActionResult Create(IEnumerable<ParkingPlace> ParkingPlaces)
{