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" />
    }
}

このコードは、最初のアイテムを除く、コレクション内のすべてのアイテムに対して機能します。

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>
4

1 に答える 1

3

これは解決されました...フォームをネストしていたためです(ページ全体が編集ページだったため、フォームにラップされていました)。

この SO の質問はそれを説明しています: foreach ループ razor MVC 3 でフォームタグが消える

于 2015-03-29T08:52:50.090 に答える