当点击“a”锚标签时我想从一个控制器(HomeController.cs)重定向到另一个控制器(CartController.cs)索引[GET]并执行代码并返回数据到视图(cart / index.cshtml )。
这是js代码
$(document).on('click', '.btn-margin', function () {
if (parseInt($('#UserID').val()) > 0) {
var pmID = $(this).attr("id"),
bid = $(this).attr("brand-id");
$.ajax({
url: '@Url.Action("index", "cart")',
data: { "id": pmID, "bid" : bid },
type: 'GET',
dataType: 'json',
success: function (response) {
},
error: function (xhr, status, error) {
}
});
}
});
并在CartController中
[HttpGet]
public ActionResult Index(long id = 0, long bid = 0)
{
GetStates();
return View(productBL.GetProductById(id, bid));
}
正如预期的那样,它必须重定向到购物车的index.cshtml ..但我的结果仍然在index.cshtml页面的homeController中。
请帮助我如何获得预期的结果..
答案 0 :(得分:0)
你不需要为此调用ajax。 在你''点击使用这样的东西
$('.btn-margin').on('click',function(){
if (parseInt($('#UserID').val()) > 0) {
var pmID = $(this).attr("id"),
var bid = $(this).attr("brand-id");
window.location.href = "/cart/index?id="+pmID+"&bid=" +bid;
}
}
希望这会有所帮助。
答案 1 :(得分:0)
在您的AJAX调用中,您可以定义:
$.ajax({
dataType: 'json',
但您的控制器操作会返回HTML,而不是JSON:
public ActionResult Index(long id = 0, long bid = 0)
return View(productBL.GetProductById(id, bid));
它应该使用Json方法返回数据:
return Json(prodcutBL.GetProductById(id, bid), JsonBehavior.AllowGet);
第二个参数表示允许GET请求(通常只需要POST,否则会引发异常)。这将返回一个JSON对象到成功回调,然后您可以像正常一样访问数据。您可能希望直接返回对象,而不是数组,如:
return Json(new { products = prodcutBL.GetProductById(id, bid) }, JsonBehavior.AllowGet);
然后在你的回调中访问它:
success: function (response) {
if (response.products.length == 0)
alert("No data available");
else /* do something */
},
Microsoft建议returning an object, not an array, for a web response.
答案 2 :(得分:0)
试试这个 - return RedirectToAction("Index", "CartController", new{ id: pmId})