Невозможно отобразить вид при нажатии кнопки
При нажатии на тег привязки "a" я хочу перенаправить с одного контроллера (HomeController.cs) на другой контроллер (CartController.cs) index [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 корзины.. но мой результат все еще в homeController страницы index.cshtml.
Пожалуйста, помогите мне, как получить ожидаемый результат..
3 ответа
В своем вызове 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 рекомендует возвращать объект, а не массив, для веб-ответа.
Вам не нужен вызов 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;
}
}
надеюсь это поможет.
Попробуй это - return RedirectToAction("Index", "CartController", new{ id: pmId})