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" />
}
}
このコードは、最初のアイテムを除く、コレクション内のすべてのアイテムに対して機能します。
2 番目以降のアイテムでは、フォーム要素が表示され、期待どおりに機能しますが、最初のアイテムではフォームが出力されません。代わりに、要素内にない 2 つの要素を取得するだけです。
これは、Firefox 開発ツールを介して出力された HTML (コレクション内の 2 つのアイテム) の例です。最初の項目にはフォームがなく、入力は単独で表示されますが、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>