无法在按钮单击时呈现视图

时间:2017-05-30 15:35:17

标签: jquery asp.net-mvc asp.net-ajax

当点击“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中。

请帮助我如何获得预期的结果..

3 个答案:

答案 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})