Невозможно отобразить вид при нажатии кнопки

При нажатии на тег привязки "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})

Другие вопросы по тегам