我正在努力解决如何正确提交表单,我真的只需要发送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调用完成之前结束新表单。我读here我可以使$ .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;
}
}
答案 0 :(得分:3)
您可以使用$.post
的成功回调函数(第三个参数)“成功网址”可以是硬编码的,也可以来自您的POST(Save
)操作(实际上是无效的,但可能是JsonResult)
$.post('/OrderCheckout/Save',
{ jsonData: selectedProductsAsJson },
function() {
$('#productListForm').submit();
}
);
答案 1 :(得分: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");
}
OR
$.post('/OrderCheckout/Save', { jsonData: selectedProductsAsJson },
function() {
$('#productListForm').submit();
}
);