は、だから私はこのCSHTMLを持ってリターンビュー後に生成:コントローラでフォームPOSTパラメータが間違っ
[HttpPost]
public ActionResult DeleteProduct(int productId, int? productVariantId, int quantity)
{
//...product gets deleted, etc. Not important for this question
//regenerate the view, same as when loading the 'Order' view initially
OrderWrapperViewModel model = GenerateOrderWrapperModel();
return View("Order", model);
}
ロード順序ビューは次のようになります:
[HttpGet]
public ActionResult Order()
{
OrderWrapperViewModel model = GenerateOrderWrapperModel();
return View(model);
}
このバックエンドを呼び出し
@using (Html.BeginForm("DeleteProduct", "Shop", FormMethod.Post))
{
@Html.Hidden("productId", product.ProductId);
@Html.Hidden("productVariantId", product.ProductVariantId);
@Html.Hidden("quantity", product.Quantity);
<button type="submit" class="btn btn-default"><span class="glyphicon glyphicon-trash" aria-hidden="true"></span></button>
}
最初に削除を呼び出すと、IDが7
、製品バリアントIDがの商品が削除されます。すべてがうまくいく。しかし、ページが返された後、ID 7の製品はもうリストされなくなり、ID 1の製品のみになります.2度目は製品ID:1
と製品バリアントID:4
です。
DeleteProduct
から戻ると、現在、URLは/ Shop/DeleteProductを表示しています。私はかみそりのコードをデバッグする場合:
右、正しいようですか?
まあ、HTMLは異なります。もちろん
、ボタンをクリックするだけでなく、これらの不正なパラメータを渡します。私はこれが同じボタンであることを保証することができます、その時に表示される製品は1つだけです。
私は再度オーダービューにリダイレクトすることで解決しましたので、私はにもっと興味があります。理由はです。理由は、他の人にはエラーメッセージ(ModelState
を使用)が返されているからです。私がリダイレクトするともちろんそれは動作しません。
運用環境でも発生します。
正しい方法はPRGパターンに従うことです。しかし、その動作の説明については、[TextBoxFor初期値を表示し、コードから更新された値ではありません]を参照してください(http://stackoverflow.com/questions/26654862/textboxfor-displaying-initial-value-not-the-value-updated -from-code/26664111#26664111) –