Html.BeginForm不输出集合中第一个项目的表单

时间:2015-03-28 12:14:52

标签: forms razor model-view-controller foreach html.beginform

我正在使用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 Dev工具输出的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>

1 个答案:

答案 0 :(得分:3)

现在已经解决了...这是因为我有嵌套的表格(整个页面是一个编辑页面,因此被包装在一个表单中)。

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