Html.BeginForm 不为集合中的第一项输出表单
Html.BeginForm not outputting Form for first item in collection
我正在使用 MVC5 并希望为集合中的每个项目显示一个表单。表单将 post 提交到不同控制器中的操作。
我的剃须刀如下:
@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 个项目)的示例。请注意,第一项没有表单,输入会自行显示,但第二项有表单。
我无法 post 图片,因为我没有足够的代表,但你可以从这里下载它: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>
现在已经解决了...这是因为我有嵌套的表单(整个页面是一个编辑页面所以被包裹在一个表单中)。
这个 SO 问题对此进行了解释:form tag dissapear in foreach loop razor MVC 3
我正在使用 MVC5 并希望为集合中的每个项目显示一个表单。表单将 post 提交到不同控制器中的操作。
我的剃须刀如下:
@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 个项目)的示例。请注意,第一项没有表单,输入会自行显示,但第二项有表单。
我无法 post 图片,因为我没有足够的代表,但你可以从这里下载它: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>
现在已经解决了...这是因为我有嵌套的表单(整个页面是一个编辑页面所以被包裹在一个表单中)。
这个 SO 问题对此进行了解释:form tag dissapear in foreach loop razor MVC 3