0

フォームコントロールを送信するのではなく、JSONを送信するだけでよいフォームを適切に送信する方法に苦労しています。SubmitOrder()javascript関数があります:

function SubmitOrder() {
    var selectedProductsAsJson = JSON.stringify(selectedProducts);
    // This line works...
    $.post('/OrderCheckout/Save', { jsonData: selectedProductsAsJson });
    // ... or this line works...
    $('#productListForm').submit();
    // but not both lines together.
}

私がやろうとしているのは、selectedProductsAsJsonをコントローラーに送信し、それを処理してから、ユーザーを新しいページに送信することです。$ .post行は、最初の2つのアクションを実行しますが、その後、ユーザーを新しいページに移動する方法がわかりません。

.submit()行を実行するだけで、ユーザーは新しいページにリダイレクトされますが、コントローラーには処理するjsonデータがありません。

両方の行を使用する場合、$。post呼び出しは非同期であり、$。post呼び出しが完了する前に、ユーザーは新しいフォームを使用することになります。$ .post呼び出しを同期させることができることをここで読みましたが、サーバーへの1回の呼び出しでこれらすべてを実行できるはずです。これを実現するために私は何が欠けていますか?

私のコントローラーは現在このようになっています。

public class OrderCheckoutController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public void Save(string jsonData)
    {
        List<Product> selectedProducts = new JavaScriptSerializer().Deserialize<List<Product>>(jsonData);
        decimal totalPrice = selectedProducts.Sum(x => x.Price);
        ViewBag.SaleTotal = totalPrice;
    }
}
4

2 に答える 2

3

$ .postの成功コールバック関数(3番目のパラメーター)を使用できます

「成功URL」はハードコーディングすることも、POST(Save)アクションから取得することもできます(実際には無効ですが、JsonResultである可能性があります)

$.post('/OrderCheckout/Save', 
       { jsonData: selectedProductsAsJson }, 
        function() {
          $('#productListForm').submit();
        }
      );
于 2012-10-24T14:44:04.770 に答える
1
public ActionResult Save(string jsonData)
{
    List<Product> selectedProducts = new JavaScriptSerializer().Deserialize<List<Product>>(jsonData);
    decimal totalPrice = selectedProducts.Sum(x => x.Price);
    ViewBag.SaleTotal = totalPrice;
    return RedirectToAction("Index");
}

また

$.post('/OrderCheckout/Save', { jsonData: selectedProductsAsJson }, 
        function() {
          $('#productListForm').submit();
        }
);
于 2012-10-24T14:42:18.363 に答える