当用户完成添加项目时,我想将此对象POST到控制器操作,并让操作使用此数据返回强类型视图.
目前,我有jQuery.ajax POST将此JSON对象发送到Action方法,然后将此对象绑定到我的强类型模型.问题是,我实际上希望这个jQuery.ajax POST重定向,好像JSON对象在FORM中并且只是被提交.
我也不能使用jQuery.post()方法,它会根据需要重定向,因为我需要能够将contentType设置为“application / json”,这样我的绑定才能正常工作.不幸的是,jQuery.post()方法不允许您设置此参数.
我已经读过jQuery.post()方法基本上使用jQuery.ajax()方法,所以我一直在努力让jQuery.ajax()方法重定向.
我还读到我可以为所有jQuery.ajax()方法设置默认的contentType,然后允许我使用jQuery.post()方法但是如果可能的话想尝试避免这种情况.
谢谢
编辑:更新了Saedeas建议:
我在’索引’视图上的JavaScript:
<script language="javascript" type="text/javascript"> // Initialize the Shopping Cart object var m_ShoppingCart = { UserId: 10, DeliveryInstructions: "Leave at front desk", CartItems: [] }; $(document).ready(function () { $.extend({ postJSON: function (url, data, callback) { return $.ajax({ type: "POST", url: url, data: JSON.stringify(data), success: callback, dataType: "json", contentType: "application/json", processData: false }); } }); }); function PostDataWithRedirect() { var url = '@Url.Action("ConfirmOrder", "Store")'; $.postJSON(url, m_ShoppingCart, function () { }); } function AddToCart(id, itemName, price, quantity) { // Add the item to the shopping cart object m_ShoppingCart.CartItems.push({ "Id": id, "ItemName": itemName, "Price": price.toFixed(2), // Issue here if you don't specify the decimal place "Quantity": quantity }); // Render the shopping cart object RenderShoppingCart(); } function RenderShoppingCart() { $("#CartItemList").html(""); var totalAmount = 0; $.each(m_ShoppingCart.CartItems, function (index, cartItem) { var itemTotal = Number(cartItem.Price) * Number(cartItem.Quantity); totalAmount += itemTotal; $("#CartItemList").append("<li>" + cartItem.ItemName + " - $" + itemTotal.toFixed(2) + "</li>"); }); $("#TotalAmount").html("$" + totalAmount.toFixed(2)); } </script>
然后控制器动作’ConfirmOrder’
[HttpPost] public ActionResult ConfirmOrder(ShoppingCartModel model) { return View(model); }
因此,当调用PostDataWithRedirect()JavaScript方法时,它必须点击ConfirmOrder控制器操作并重定向到ConfirmOrder视图.我的索引视图上的购物车对象完全由JavaScript构建,然后用户单击“继续检查”按钮并重定向等.
PS:我的完整工作示例可以在文章[How to POST a JSON object in MVC]中找到,我只需要更新此代码,以便它可以执行发布和重定向,如上所述
返回重定向的视图:调节器
return View("redirectionView");
视图
RedirectionView.cshtml @{ Layout = null; } <script type="text/javascript"> alert("Success! Redirecting..."); window.location = "./"; </script>
编辑
为了适应数据保留,请使用tempdata.
调节器
TempData["collectedUserData"] = collectedData; return View("redirectionView");
RedirectionView.cshtml
@{ Layout = null; } <script type="text/javascript"> alert("Success! Redirecting..."); window.location = "./Rebuilder/ActionMethod"; </script>
控制器重建者
public ActionResult ActionMethod() { if( TempData.ContainsKey("collectedUserData") ) { var collectedData = TempData["collectedUserData"]; } //todo: use else clause to catch data not present use collectedData to build new view return View(); }