2

我正在使用 MVC5 并希望为集合中的每个项目显示一个表单。提交时,表单将发布到不同控制器中的操作。

我的剃须刀如下:

@foreach (var skuInOrder in Model.Order.Skus)
{
    using (Html.BeginForm("Delete", "SkuInOrders", new { id = skuInOrder.Id }, FormMethod.Post, new { name = skuInOrder.Id, id = skuInOrder.Id }))
    {
        <input id="orderId" name="orderId" value="Model.Order.Id" type="hidden" />
        <input type="submit" class="btn btn-default" value="Delete" />
    }
}

此代码适用于集合中除第一个之外的所有项目。

对于第二个项目,表单元素会显示并按预期工作,但不会为第一个项目输出表单。相反,我只是简单地获取不在一个元素内的两个元素。

这是通过 Firefox 开发工具输出的 HTML 示例(集合中有 2 个项目)。请注意,第一项没有表单,输入是单独显示的,但第二项有一个表单。

我无法发布图片,因为我没有足够的代表,但您可以在此处下载表格:https ://onedrive.live.com/redir?resid=999be3b43db18398%211133026

更新 我现在发现即使使用标准 HTML 表单(不仅仅是@Html.beginForm)我也会得到这种行为。例如,此剃须刀代码还删除了第一项的表单元素,但不删除后续项。

<form action="/SkuInOrders/Delete/@skuInOrder.Id" method="post" >
    <input id="orderId" name="orderId" value="@Model.Order.Id" type="hidden" />
    <input type="submit" class="btn btn-default" value="Delete" />
</form>
4

1 回答 1

3

现在已经解决了……这是因为我嵌套了表单(整个页面是一个编辑页面,所以被包装在一个表单中)。

这个SO问题解释了它:form tag dissapear in foreach loop razor MVC 3

于 2015-03-29T08:52:50.090 回答