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 行完成了前两个操作,但之后我不知道如何将用户发送到新页面。

如果我只执行 .submit() 行,用户将被重定向到新页面,但控制器没有要处理的 json 数据。

如果我同时使用这两行,$.post 调用是异步的,用户将在 $.post 调用完成之前进入新表单。我在这里读到我可以使 $.post 调用同步,但似乎我应该能够通过一次调用服务器来完成所有这些。我缺少什么来实现这一点?

我的控制器目前看起来像这样;

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的成功回调函数(第三个参数)

“成功 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 回答